Skip to content

Commit 4dc08cc

Browse files
committed
[Coverage] Propogate counter to condition of conditional operator
Clang usually propagates counter mapping region for conditions of `if`, `while`, `for`, etc from parent counter. We should do the same for condition of conditional operator. Differential Revision: https://reviews.llvm.org/D95918
1 parent d41c6d5 commit 4dc08cc

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

clang/lib/CodeGen/CoverageMappingGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1462,7 +1462,7 @@ struct CounterCoverageMappingBuilder
14621462
Counter ParentCount = getRegion().getCounter();
14631463
Counter TrueCount = getRegionCounter(E);
14641464

1465-
Visit(E->getCond());
1465+
propagateCounts(ParentCount, E->getCond());
14661466

14671467
if (!isa<BinaryConditionalOperator>(E)) {
14681468
// The 'then' count applies to the area immediately after the condition.

clang/test/CoverageMapping/if.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
int nop() { return 0; }
44

55
// CHECK-LABEL: _Z3foov:
6-
// CHECK-NEXT: [[@LINE+2]]:12 -> [[@LINE+7]]:2 = #0
6+
// CHECK-NEXT: [[@LINE+3]]:12 -> [[@LINE+8]]:2 = #0
7+
// CHECK-NEXT: [[@LINE+3]]:15 -> [[@LINE+3]]:19 = #0
78
// CHECK-NEXT: Branch,File 0, [[@LINE+2]]:15 -> [[@LINE+2]]:19 = 0, 0
89
void foo() { // CHECK-NEXT: Gap,File 0, [[@LINE+1]]:20 -> [[@LINE+1]]:22 = #2
910
if (int j = true ? nop() // CHECK-NEXT: [[@LINE]]:22 -> [[@LINE]]:27 = #2
@@ -38,11 +39,13 @@ int main() { // CHECK: File 0, [[@LINE]]:12 -> {{[0-9]+}}:2 =
3839
i = 3; // CHECK-NEXT: File 0, [[@LINE-1]]:10 -> [[@LINE+1]]:4 = (#0 - #4)
3940
}
4041

42+
// CHECK-NEXT: File 0, [[@LINE+2]]:7 -> [[@LINE+2]]:13 = #0
4143
// CHECK-NEXT: Branch,File 0, [[@LINE+1]]:7 -> [[@LINE+1]]:13 = #5, (#0 - #5)
4244
i = i == 0? // CHECK-NEXT: Gap,File 0, [[@LINE]]:13 -> [[@LINE+1]]:9 = #5
4345
i + 1 : // CHECK-NEXT: File 0, [[@LINE]]:9 -> [[@LINE]]:14 = #5
4446
i + 2; // CHECK-NEXT: File 0, [[@LINE]]:9 -> [[@LINE]]:14 = (#0 - #5)
4547

48+
// CHECK-NEXT: File 0, [[@LINE+4]]:7 -> [[@LINE+4]]:13 = #0
4649
// CHECK-NEXT: Branch,File 0, [[@LINE+3]]:7 -> [[@LINE+3]]:13 = #6, (#0 - #6)
4750
// CHECK-NEXT: Gap,File 0, [[@LINE+2]]:13 -> [[@LINE+2]]:14 = #6
4851
// CHECK-NEXT: File 0, [[@LINE+1]]:14 -> [[@LINE+1]]:20 = #6

clang/test/CoverageMapping/macro-expressions.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,23 @@ void foo(int i) {
8383
// CHECK: File 0, [[@LINE+1]]:42 -> [[@LINE+1]]:44 = #7
8484
for (DECL(int, j) : ARR(int, 1, 2, 3)) {}
8585

86+
// CHECK-NEXT: File 0, [[@LINE+4]]:10 -> [[@LINE+4]]:11 = #0
8687
// CHECK-NEXT: Branch,File 0, [[@LINE+3]]:10 -> [[@LINE+3]]:11 = #8, (#0 - #8)
8788
// CHECK-NEXT: Expansion,File 0, [[@LINE+2]]:14 -> [[@LINE+2]]:20 = #0
8889
// CHECK-NEXT: Expansion,File 0, [[@LINE+1]]:23 -> [[@LINE+1]]:29 = #0
8990
(void)(i ? PRIo64 : PRIu64);
9091

92+
// CHECK-NEXT: File 0, [[@LINE+6]]:10 -> [[@LINE+6]]:11 = #0
9193
// CHECK: File 0, [[@LINE+5]]:14 -> [[@LINE+5]]:15 = #9
92-
// CHECK-NEXT: Expansion,File 0, [[@LINE+4]]:18 -> [[@LINE+4]]:22 = (#0 - #9)
93-
// CHECK-NEXT: File 0, [[@LINE+3]]:22 -> [[@LINE+3]]:33 = (#0 - #9)
94+
// CHECK-NEXT: File 0, [[@LINE+4]]:18 -> [[@LINE+4]]:33 = (#0 - #9)
95+
// CHECK-NEXT: Expansion,File 0, [[@LINE+3]]:18 -> [[@LINE+3]]:22 = (#0 - #9)
9496
// CHECK: File 0, [[@LINE+2]]:28 -> [[@LINE+2]]:29 = #10
9597
// CHECK-NEXT: File 0, [[@LINE+1]]:32 -> [[@LINE+1]]:33 = ((#0 - #9) - #10)
9698
(void)(i ? i : EXPR(i) ? i : 0);
99+
// CHECK-NEXT: File 0, [[@LINE+5]]:10 -> [[@LINE+5]]:11 = #0
97100
// CHECK-NEXT: Branch,File 0, [[@LINE+4]]:10 -> [[@LINE+4]]:11 = #11, (#0 - #11)
98-
// CHECK-NEXT: Expansion,File 0, [[@LINE+3]]:15 -> [[@LINE+3]]:19 = (#0 - #11)
99-
// CHECK-NEXT: File 0, [[@LINE+2]]:19 -> [[@LINE+2]]:27 = (#0 - #11)
101+
// CHECK-NEXT: File 0, [[@LINE+3]]:15 -> [[@LINE+3]]:27 = (#0 - #11)
102+
// CHECK-NEXT: Expansion,File 0, [[@LINE+2]]:15 -> [[@LINE+2]]:19 = (#0 - #11)
100103
// CHECK-NEXT: File 0, [[@LINE+1]]:26 -> [[@LINE+1]]:27 = ((#0 - #11) - #12)
101104
(void)(i ?: EXPR(i) ?: 0);
102105
}

0 commit comments

Comments
 (0)