Skip to content

Commit 9e0f60f

Browse files
evodius96chapuni
authored andcommitted
Import Alan's testcase from llvm#78819
1 parent 2b6edff commit 9e0f60f

File tree

4 files changed

+174
-0
lines changed

4 files changed

+174
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#define C c
2+
#define D 1
3+
#define E (C != a) && (C > a)
4+
#define F E
5+
6+
void __attribute__((noinline)) func1(void) { return; }
7+
8+
void __attribute__((noinline)) func(int a, int b, int c) {
9+
if (a && D && E || b)
10+
func1();
11+
if (b && D)
12+
func1();
13+
if (a && (b && C) || (D && F))
14+
func1();
15+
}
16+
17+
int main() {
18+
func(2, 3, 3);
19+
return 0;
20+
}
79.7 KB
Binary file not shown.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
main
2+
# Func Hash:
3+
24
4+
# Num Counters:
5+
1
6+
# Counter Values:
7+
1
8+
9+
foo
10+
# Func Hash:
11+
395201011017399473
12+
# Num Counters:
13+
22
14+
# Counter Values:
15+
1
16+
1
17+
0
18+
0
19+
1
20+
1
21+
1
22+
1
23+
1
24+
1
25+
1
26+
1
27+
1
28+
1
29+
0
30+
1
31+
1
32+
1
33+
0
34+
0
35+
0
36+
0
37+
# Num Bitmap Bytes:
38+
$13
39+
# Bitmap Byte Values:
40+
0x0
41+
0x0
42+
0x0
43+
0x20
44+
0x8
45+
0x0
46+
0x20
47+
0x0
48+
0x0
49+
0x0
50+
0x0
51+
0x0
52+
0x0
53+
54+
55+
bar
56+
# Func Hash:
57+
24
58+
# Num Counters:
59+
1
60+
# Counter Values:
61+
3
62+
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Test visualization of MC/DC constructs for branches in macro expansions.
2+
3+
// RUN: llvm-profdata merge %S/Inputs/mcdc-macro.proftext -o %t.profdata
4+
// RUN: llvm-cov show --show-expansions --show-branches=count --show-mcdc %S/Inputs/mcdc-macro.o -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs %S/Inputs/mcdc-macro.c | FileCheck %s
5+
6+
// CHECK: | | | Branch (2:11): [Folded - Ignored]
7+
// CHECK: | | | Branch (3:11): [True: 0, False: 0]
8+
// CHECK: | | | Branch (3:23): [True: 0, False: 0]
9+
// CHECK: | Branch (9:7): [True: 0, False: 0]
10+
// CHECK-NEXT: | Branch (9:22): [True: 0, False: 0]
11+
// CHECK-NEXT: ------------------
12+
// CHECK-NEXT: |---> MC/DC Decision Region (9:7) to (9:23)
13+
// CHECK-NEXT: |
14+
// CHECK-NEXT: | Number of Conditions: 5
15+
// CHECK-NEXT: | Condition C1 --> (9:7)
16+
// CHECK-NEXT: | Condition C2 --> (2:11)
17+
// CHECK-NEXT: | Condition C3 --> (3:11)
18+
// CHECK-NEXT: | Condition C4 --> (3:23)
19+
// CHECK-NEXT: | Condition C5 --> (9:22)
20+
// CHECK-NEXT: |
21+
// CHECK-NEXT: | Executed MC/DC Test Vectors:
22+
// CHECK-NEXT: |
23+
// CHECK-NEXT: | None.
24+
// CHECK-NEXT: |
25+
// CHECK-NEXT: | C1-Pair: not covered
26+
// CHECK-NEXT: | C2-Pair: constant folded
27+
// CHECK-NEXT: | C3-Pair: not covered
28+
// CHECK-NEXT: | C4-Pair: not covered
29+
// CHECK-NEXT: | C5-Pair: not covered
30+
// CHECK-NEXT: | MC/DC Coverage for Decision: 0.00%
31+
// CHECK-NEXT: |
32+
// CHECK-NEXT: ------------------
33+
34+
// CHECK: | | | Branch (2:11): [Folded - Ignored]
35+
// CHECK: | Branch (11:7): [True: 0, False: 0]
36+
// CHECK-NEXT: ------------------
37+
// CHECK-NEXT: |---> MC/DC Decision Region (11:7) to (11:13)
38+
// CHECK-NEXT: |
39+
// CHECK-NEXT: | Number of Conditions: 2
40+
// CHECK-NEXT: | Condition C1 --> (11:7)
41+
// CHECK-NEXT: | Condition C2 --> (2:11)
42+
// CHECK-NEXT: |
43+
// CHECK-NEXT: | Executed MC/DC Test Vectors:
44+
// CHECK-NEXT: |
45+
// CHECK-NEXT: | None.
46+
// CHECK-NEXT: |
47+
// CHECK-NEXT: | C1-Pair: not covered
48+
// CHECK-NEXT: | C2-Pair: constant folded
49+
// CHECK-NEXT: | MC/DC Coverage for Decision: 0.00%
50+
// CHECK-NEXT: |
51+
// CHECK-NEXT: ------------------
52+
53+
// CHECK: | | | Branch (1:11): [True: 0, False: 0]
54+
// CHECK: | | | Branch (2:11): [Folded - Ignored]
55+
// CHECK: | | | | | Branch (3:11): [True: 0, False: 0]
56+
// CHECK: | | | | | Branch (3:23): [True: 0, False: 0]
57+
// CHECK: | Branch (13:7): [True: 0, False: 0]
58+
// CHECK-NEXT: | Branch (13:13): [True: 0, False: 0]
59+
// CHECK-NEXT: ------------------
60+
// CHECK-NEXT: |---> MC/DC Decision Region (13:7) to (13:32)
61+
// CHECK-NEXT: |
62+
// CHECK-NEXT: | Number of Conditions: 6
63+
// CHECK-NEXT: | Condition C1 --> (13:7)
64+
// CHECK-NEXT: | Condition C2 --> (13:13)
65+
// CHECK-NEXT: | Condition C3 --> (1:11)
66+
// CHECK-NEXT: | Condition C4 --> (2:11)
67+
// CHECK-NEXT: | Condition C5 --> (3:11)
68+
// CHECK-NEXT: | Condition C6 --> (3:23)
69+
// CHECK-NEXT: |
70+
// CHECK-NEXT: | Executed MC/DC Test Vectors:
71+
// CHECK-NEXT: |
72+
// CHECK-NEXT: | None.
73+
// CHECK-NEXT: |
74+
// CHECK-NEXT: | C1-Pair: not covered
75+
// CHECK-NEXT: | C2-Pair: not covered
76+
// CHECK-NEXT: | C3-Pair: not covered
77+
// CHECK-NEXT: | C4-Pair: constant folded
78+
// CHECK-NEXT: | C5-Pair: not covered
79+
// CHECK-NEXT: | C6-Pair: not covered
80+
// CHECK-NEXT: | MC/DC Coverage for Decision: 0.00%
81+
// CHECK-NEXT: |
82+
// CHECK-NEXT: ------------------
83+
84+
Instructions for regenerating the test:
85+
86+
# cd %S/Inputs
87+
cp mcdc-macro.c /tmp
88+
89+
clang -fcoverage-mcdc -fprofile-instr-generate -fcoverage-compilation-dir=. \
90+
-fcoverage-mapping /tmp/mcdc-macro.c -o /tmp/mcdc-macro.o
91+
92+
mv /tmp/mcdc-macro.o %S/Inputs

0 commit comments

Comments
 (0)