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 :/

llvm-svn: 243360
This commit is contained in:
Justin Bogner 2015-07-28 00:41:51 +00:00
parent 80414569b8
commit 203f09223b
2 changed files with 16 additions and 1 deletions

View File

@ -3406,7 +3406,7 @@ void CodeGenModule::AddDeferredUnusedCoverageMapping(Decl *D) {
case Decl::ObjCMethod:
case Decl::CXXConstructor:
case Decl::CXXDestructor: {
if (!cast<FunctionDecl>(D)->hasBody())
if (!cast<FunctionDecl>(D)->doesThisDeclarationHaveABody())
return;
auto I = DeferredEmptyCoverageMappingDecls.find(D);
if (I == DeferredEmptyCoverageMappingDecls.end())

View File

@ -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();