Thanks Justin! @Hans, could we take this for llvm 3.9 also?
best, vedant > On Jul 26, 2016, at 1:39 PM, Justin Bogner <m...@justinbogner.com> wrote: > > Vedant Kumar via cfe-commits <cfe-commits@lists.llvm.org> writes: >> Hi Justin, >> >> Could you take a look at this code coverage fix? >> >> It skips visiting decls if they would require context from system headers to >> present properly. This prevents us from writing out an empty coverage mapping >> for the lambda in `assert([] { return true; }());`. >> >> I think it would be a good idea to get it into the 3.9 release. > > Yep, I think this should go into 3.9 as well. LGTM. > >> thanks, >> vedant >> >>> On Jul 25, 2016, at 5:24 PM, Vedant Kumar via cfe-commits >>> <cfe-commits@lists.llvm.org> wrote: >>> >>> Author: vedantk >>> Date: Mon Jul 25 19:24:59 2016 >>> New Revision: 276716 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=276716&view=rev >>> Log: >>> [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. >>> >>> Added: >>> cfe/trunk/test/CoverageMapping/system_macro.cpp >>> - copied, changed from r276711, >>> cfe/trunk/test/CoverageMapping/system_macro.c >>> Removed: >>> cfe/trunk/test/CoverageMapping/system_macro.c >>> Modified: >>> cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp >>> >>> Modified: cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp?rev=276716&r1=276715&r2=276716&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp (original) >>> +++ cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp Mon Jul 25 19:24:59 2016 >>> @@ -352,6 +352,9 @@ struct EmptyCoverageMappingBuilder : pub >>> 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); >>> } >>> >>> >>> Removed: cfe/trunk/test/CoverageMapping/system_macro.c >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CoverageMapping/system_macro.c?rev=276715&view=auto >>> ============================================================================== >>> --- cfe/trunk/test/CoverageMapping/system_macro.c (original) >>> +++ cfe/trunk/test/CoverageMapping/system_macro.c (removed) >>> @@ -1,23 +0,0 @@ >>> -// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping >>> -dump-coverage-mapping -emit-llvm-only -main-file-name system_macro.c -o - >>> %s | FileCheck %s >>> - >>> -#ifdef IS_SYSHEADER >>> - >>> -#pragma clang system_header >>> -#define Func(x) if (x) {} >>> -#define SomeType int >>> - >>> -#else >>> - >>> -#define IS_SYSHEADER >>> -#include __FILE__ >>> - >>> -// 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() {} >>> - >>> -#endif >>> >>> Copied: cfe/trunk/test/CoverageMapping/system_macro.cpp (from r276711, >>> cfe/trunk/test/CoverageMapping/system_macro.c) >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CoverageMapping/system_macro.cpp?p2=cfe/trunk/test/CoverageMapping/system_macro.cpp&p1=cfe/trunk/test/CoverageMapping/system_macro.c&r1=276711&r2=276716&rev=276716&view=diff >>> ============================================================================== >>> --- cfe/trunk/test/CoverageMapping/system_macro.c (original) >>> +++ cfe/trunk/test/CoverageMapping/system_macro.cpp Mon Jul 25 19:24:59 2016 >>> @@ -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 >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> cfe-commits@lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits