diff options
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 8 | ||||
-rw-r--r-- | clang/test/CoverageMapping/header.cpp | 5 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 43607002544..4903d408ada 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -61,6 +61,11 @@ using namespace clang; using namespace CodeGen; +static llvm::cl::opt<bool> LimitedCoverage( + "limited-coverage-experimental", llvm::cl::ZeroOrMore, + llvm::cl::desc("Emit limited coverage mapping information (experimental)"), + llvm::cl::init(false)); + static const char AnnotationSection[] = "llvm.metadata"; static CGCXXABI *createCXXABI(CodeGenModule &CGM) { @@ -4231,6 +4236,9 @@ void CodeGenModule::AddDeferredUnusedCoverageMapping(Decl *D) { case Decl::CXXDestructor: { if (!cast<FunctionDecl>(D)->doesThisDeclarationHaveABody()) return; + SourceManager &SM = getContext().getSourceManager(); + if (LimitedCoverage && SM.getMainFileID() != SM.getFileID(D->getLocStart())) + return; auto I = DeferredEmptyCoverageMappingDecls.find(D); if (I == DeferredEmptyCoverageMappingDecls.end()) DeferredEmptyCoverageMappingDecls[D] = true; diff --git a/clang/test/CoverageMapping/header.cpp b/clang/test/CoverageMapping/header.cpp index 5e0b3111c1d..d42c1544466 100644 --- a/clang/test/CoverageMapping/header.cpp +++ b/clang/test/CoverageMapping/header.cpp @@ -2,6 +2,9 @@ // RUN: FileCheck -input-file %tmapping %s --check-prefix=CHECK-FUNC // RUN: FileCheck -input-file %tmapping %s --check-prefix=CHECK-STATIC-FUNC // RUN: FileCheck -input-file %tmapping %s --check-prefix=CHECK-STATIC-FUNC2 +// +// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -mllvm -limited-coverage-experimental=true -dump-coverage-mapping -emit-llvm-only -main-file-name header.cpp %s > %tmapping.limited +// RUN: FileCheck -input-file %tmapping.limited %s --check-prefix=CHECK-LIMITED #include "Inputs/header1.h" @@ -22,3 +25,5 @@ int main() { // CHECK-STATIC-FUNC2: static_func2 // CHECK-STATIC-FUNC2: File 0, 21:33 -> 29:2 = 0 + +// CHECK-LIMITED-NOT: static_func2 |