From 203f09223bb0bed16194d6a28431ba6a2fd5346a Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Tue, 28 Jul 2015 00:41:51 +0000 Subject: [PATCH] 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 --- clang/lib/CodeGen/CodeGenModule.cpp | 2 +- clang/test/CoverageMapping/decl.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 clang/test/CoverageMapping/decl.c diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index f6bd6a4069b9..e899c9442b2d 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/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/clang/test/CoverageMapping/decl.c b/clang/test/CoverageMapping/decl.c new file mode 100644 index 000000000000..96ee30357a84 --- /dev/null +++ b/clang/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();