r276716 - [Coverage] Do not write out coverage mappings with zero entries

Vedant Kumar via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 26 13:41:42 PDT 2016


Thanks Justin!

@Hans, could we take this for llvm 3.9 also?

best,
vedant

> On Jul 26, 2016, at 1:39 PM, Justin Bogner <mail at justinbogner.com> wrote:
> 
> Vedant Kumar via cfe-commits <cfe-commits at 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 at 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 at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list