[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