From: Justin Bogner Date: Tue, 28 Jul 2015 00:41:51 +0000 (+0000) Subject: InstrProf: Fix a misuse of the FunctionDecl API when generating coverage X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd3d8023a943a3bf37dad8d6aab23a45260e83ef;p=clang InstrProf: Fix a misuse of the FunctionDecl API when generating coverage This was calling FD->hasBody(), meaning "Does the function that this decl refers to have a body?", rather than FD->doesThisDeclarationHaveABody(), meaning "Is this decl a non-deleted definition?". We might want to consider renaming these APIs :/ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243360 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index f6bd6a4069..e899c9442b 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -3406,7 +3406,7 @@ void CodeGenModule::AddDeferredUnusedCoverageMapping(Decl *D) { case Decl::ObjCMethod: case Decl::CXXConstructor: case Decl::CXXDestructor: { - if (!cast(D)->hasBody()) + if (!cast(D)->doesThisDeclarationHaveABody()) return; auto I = DeferredEmptyCoverageMappingDecls.find(D); if (I == DeferredEmptyCoverageMappingDecls.end()) diff --git a/test/CoverageMapping/decl.c b/test/CoverageMapping/decl.c new file mode 100644 index 0000000000..96ee30357a --- /dev/null +++ b/test/CoverageMapping/decl.c @@ -0,0 +1,15 @@ +// Ensure that declarations without definitions don't have maps emitted for them + +// RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only %s > %t +// FileCheck -input-file %t %s +// RUN: FileCheck -check-prefix BAR -input-file %t %s + +// FOO: foo: +// FOO-NOT: foo: +inline int foo() { return 0; } +extern inline int foo(); + +// BAR: bar: +// BAR-NOT: bar: +int bar() { return 0; } +extern int bar();