[PATCH] D25539: [Coverage] Support for C++17 switch initializers
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 12 19:42:08 PDT 2016
Do we need the same change for if-statements too?
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/20161012/3039a130/attachment.html>
More information about the cfe-commits
mailing list