[PATCH] D25539: [Coverage] Support for C++17 switch initializers

Alex L via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 13 06:35:05 PDT 2016


On 13 October 2016 at 03:42, Richard Smith <richard at metafoo.co.uk> wrote:

> Do we need the same change for if-statements too?
>

Yes, a similar change should be made for them as well.


>
> On 12 Oct 2016 6:26 pm, "Vedant Kumar via cfe-commits" <
> cfe-commits at lists.llvm.org> wrote:
>
>> vsk created this revision.
>> vsk added reviewers: arphaman, ikudrin.
>> vsk added a subscriber: cfe-commits.
>>
>> Generate coverage mappings for <init> in switch (<init>; <cond>).
>>
>> I'm unsure about whether or not the CodeGenPGO change in this patch
>> deserves more testing.
>>
>>
>> https://reviews.llvm.org/D25539
>>
>> Files:
>>   lib/CodeGen/CodeGenPGO.cpp
>>   lib/CodeGen/CoverageMappingGen.cpp
>>   test/CoverageMapping/switch.c
>>   test/CoverageMapping/switch.cpp
>>
>>
>> Index: test/CoverageMapping/switch.cpp
>> ===================================================================
>> --- test/CoverageMapping/switch.cpp
>> +++ test/CoverageMapping/switch.cpp
>> @@ -1,4 +1,5 @@
>> -// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping
>> -dump-coverage-mapping -emit-llvm-only -main-file-name switch.c %s |
>> FileCheck %s
>> +// RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping
>> -dump-coverage-mapping -emit-llvm-only -std=c++1z -triple
>> %itanium_abi_triple -main-file-name switch.cpp %s | FileCheck %s
>> +
>>                      // CHECK: foo
>>  void foo(int i) {   // CHECK-NEXT: File 0, [[@LINE]]:17 -> [[@LINE+8]]:2
>> = #0
>>    switch(i) {
>> @@ -10,7 +11,7 @@
>>    int x = 0;        // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:2
>> = #1
>>  }
>>
>> -void nop() {}
>> +int nop() { return 0; }
>>
>>                      // CHECK: bar
>>  void bar(int i) {   // CHECK-NEXT: File 0, [[@LINE]]:17 ->
>> [[@LINE+20]]:2 = #0
>> @@ -35,8 +36,16 @@
>>    nop();            // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:2
>> = #6
>>  }
>>
>> +                    // CHECK: baz
>> +void baz() {        // CHECK-NEXT: File 0, [[@LINE]]:12 -> [[@LINE+5]]:2
>> = #0
>> +  switch (int i = true ? nop()  // CHECK-NEXT: [[@LINE]]:26 ->
>> [[@LINE]]:31 = #2
>> +                       : nop(); // CHECK-NEXT: [[@LINE]]:26 ->
>> [[@LINE]]:31 = (#0 - #2)
>> +          i) {}
>> +  nop();            // CHECK-NEXT: [[@LINE]]:3 -> [[@LINE+1]]:2 = #1
>> +}
>> +
>>                      // CHECK-NEXT: main
>> -int main() {        // CHECK-NEXT: File 0, [[@LINE]]:12 ->
>> [[@LINE+34]]:2 = #0
>> +int main() {        // CHECK-NEXT: File 0, [[@LINE]]:12 ->
>> [[@LINE+35]]:2 = #0
>>    int i = 0;
>>    switch(i) {
>>    case 0:           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+7]]:10
>> = #2
>> @@ -48,7 +57,7 @@
>>    default:          // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10
>> = #4
>>      break;
>>    }
>> -  switch(i) {       // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+22]]:2
>> = #1
>> +  switch(i) {       // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+23]]:2
>> = #1
>>    case 0:           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+6]]:10
>> = #6
>>      i = 1;
>>      break;
>> @@ -58,16 +67,17 @@
>>      break;
>>    }
>>
>> -  switch(i) {       // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+12]]:2
>> = #5
>> +  switch(i) {       // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+13]]:2
>> = #5
>>    case 1:           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+5]]:11
>> = #10
>>    case 2:           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+4]]:11
>> = (#10 + #11)
>>      i = 11;
>>    case 3:           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:11
>> = ((#10 + #11) + #12)
>>    case 4:           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:11
>> = (((#10 + #11) + #12) + #13)
>>      i = 99;
>>    }
>>
>> -  foo(1);           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:11
>> = #9
>> +  foo(1);           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:11
>> = #9
>>    bar(1);
>> +  baz();
>>    return 0;
>>  }
>> Index: lib/CodeGen/CoverageMappingGen.cpp
>> ===================================================================
>> --- lib/CodeGen/CoverageMappingGen.cpp
>> +++ lib/CodeGen/CoverageMappingGen.cpp
>> @@ -813,6 +813,9 @@
>>
>>    void VisitSwitchStmt(const SwitchStmt *S) {
>>      extendRegion(S);
>> +    if (S->getInit())
>> +      Visit(S->getInit());
>> +
>>      Visit(S->getCond());
>>
>>      BreakContinueStack.push_back(BreakContinue());
>> Index: lib/CodeGen/CodeGenPGO.cpp
>> ===================================================================
>> --- lib/CodeGen/CodeGenPGO.cpp
>> +++ lib/CodeGen/CodeGenPGO.cpp
>> @@ -458,6 +458,8 @@
>>
>>    void VisitSwitchStmt(const SwitchStmt *S) {
>>      RecordStmtCount(S);
>> +    if (S->getInit())
>> +      Visit(S->getInit());
>>      Visit(S->getCond());
>>      CurrentCount = 0;
>>      BreakContinueStack.push_back(BreakContinue());
>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161013/7d106950/attachment-0001.html>


More information about the cfe-commits mailing list