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