From ce05a5324b5697e4e1547d0748688318fc3d88d4 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 26 Jul 2016 00:24:59 +0000 Subject: [PATCH] [Coverage] Do not write out coverage mappings with zero entries After r275121, we stopped mapping regions from system headers. Lambdas declared in regions belonging to system headers started producing empty coverage mappings, since the files corresponding to their spelling locs were being ignored. The coverage reader doesn't know what to do with these empty mappings. This commit makes sure that we don't produce them and adds a test. I'll make the reader stricter in a follow-up commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@276716 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CoverageMappingGen.cpp | 11 +++++++++++ .../{system_macro.c => system_macro.cpp} | 9 ++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) rename test/CoverageMapping/{system_macro.c => system_macro.cpp} (50%) diff --git a/lib/CodeGen/CoverageMappingGen.cpp b/lib/CodeGen/CoverageMappingGen.cpp index 4debc7e950..da6fa2a37a 100644 --- a/lib/CodeGen/CoverageMappingGen.cpp +++ b/lib/CodeGen/CoverageMappingGen.cpp @@ -352,6 +352,9 @@ struct EmptyCoverageMappingBuilder : public CoverageMappingBuilder { gatherFileIDs(FileIDMapping); emitSourceRegions(); + if (MappingRegions.empty()) + return; + CoverageMappingWriter Writer(FileIDMapping, None, MappingRegions); Writer.write(OS); } @@ -605,6 +608,9 @@ struct CounterCoverageMappingBuilder emitExpansionRegions(); gatherSkippedRegions(); + if (MappingRegions.empty()) + return; + CoverageMappingWriter Writer(VirtualFileMapping, Builder.getExpressions(), MappingRegions); Writer.write(OS); @@ -621,6 +627,11 @@ struct CounterCoverageMappingBuilder void VisitDecl(const Decl *D) { Stmt *Body = D->getBody(); + + // Do not propagate region counts into system headers. + if (Body && SM.isInSystemHeader(SM.getSpellingLoc(getStart(Body)))) + return; + propagateCounts(getRegionCounter(Body), Body); } diff --git a/test/CoverageMapping/system_macro.c b/test/CoverageMapping/system_macro.cpp similarity index 50% rename from test/CoverageMapping/system_macro.c rename to test/CoverageMapping/system_macro.cpp index bddc822b0d..ce0da17ce0 100644 --- a/test/CoverageMapping/system_macro.c +++ b/test/CoverageMapping/system_macro.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name system_macro.c -o - %s | FileCheck %s +// RUN: %clang_cc1 -std=c++11 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name system_macro.cpp -o - %s | FileCheck %s #ifdef IS_SYSHEADER @@ -11,13 +11,16 @@ #define IS_SYSHEADER #include __FILE__ -// CHECK-LABEL: doSomething: +// CHECK-LABEL: doSomething void doSomething(int x) { // CHECK: File 0, [[@LINE]]:25 -> {{[0-9:]+}} = #0 Func(x); return; SomeType *f; // CHECK: File 0, [[@LINE]]:11 -> {{[0-9:]+}} = 0 } -int main() {} +// CHECK-LABEL: main +int main() { // CHECK: File 0, [[@LINE]]:12 -> [[@LINE+2]]:2 = #0 + Func([] { return true; }()); +} #endif -- 2.50.1