Skip to content

Commit a4cb31b

Browse files
committed
coverage: Regression test for inconsistent handling of closure spans
1 parent 4690f97 commit a4cb31b

File tree

4 files changed

+289
-0
lines changed

4 files changed

+289
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
Function name: closure_bug::main
2+
Raw bytes (241): 0x[01, 01, 34, 01, 00, 01, 05, 05, ce, 01, 01, 05, cb, 01, 00, 05, ce, 01, 01, 05, cb, 01, 09, 05, ce, 01, 01, 05, 09, c6, 01, cb, 01, 09, 05, ce, 01, 01, 05, c3, 01, 00, 09, c6, 01, cb, 01, 09, 05, ce, 01, 01, 05, c3, 01, 0d, 09, c6, 01, cb, 01, 09, 05, ce, 01, 01, 05, 0d, be, 01, c3, 01, 0d, 09, c6, 01, cb, 01, 09, 05, ce, 01, 01, 05, bb, 01, 00, 0d, be, 01, c3, 01, 0d, 09, c6, 01, cb, 01, 09, 05, ce, 01, 01, 05, bb, 01, 11, 0d, be, 01, c3, 01, 0d, 09, c6, 01, cb, 01, 09, 05, ce, 01, 01, 05, 11, b6, 01, bb, 01, 11, 0d, be, 01, c3, 01, 0d, 09, c6, 01, cb, 01, 09, 05, ce, 01, 01, 05, 11, 01, 06, 01, 03, 0a, 03, 09, 05, 01, 0e, 05, 01, 0f, 00, 17, ce, 01, 00, 17, 00, 18, cb, 01, 02, 09, 00, 0a, 13, 06, 05, 01, 0e, 09, 01, 0f, 00, 17, c6, 01, 00, 17, 00, 18, c3, 01, 02, 09, 00, 0a, 3b, 06, 05, 01, 0e, 0d, 01, 0f, 00, 17, be, 01, 00, 17, 00, 18, bb, 01, 02, 09, 00, 0a, 7b, 06, 05, 01, 0e, 11, 01, 0f, 00, 17, b6, 01, 00, 17, 00, 18, b3, 01, 01, 01, 00, 02]
3+
Number of files: 1
4+
- file 0 => global file 1
5+
Number of expressions: 52
6+
- expression 0 operands: lhs = Counter(0), rhs = Zero
7+
- expression 1 operands: lhs = Counter(0), rhs = Counter(1)
8+
- expression 2 operands: lhs = Counter(1), rhs = Expression(51, Sub)
9+
- expression 3 operands: lhs = Counter(0), rhs = Counter(1)
10+
- expression 4 operands: lhs = Expression(50, Add), rhs = Zero
11+
- expression 5 operands: lhs = Counter(1), rhs = Expression(51, Sub)
12+
- expression 6 operands: lhs = Counter(0), rhs = Counter(1)
13+
- expression 7 operands: lhs = Expression(50, Add), rhs = Counter(2)
14+
- expression 8 operands: lhs = Counter(1), rhs = Expression(51, Sub)
15+
- expression 9 operands: lhs = Counter(0), rhs = Counter(1)
16+
- expression 10 operands: lhs = Counter(2), rhs = Expression(49, Sub)
17+
- expression 11 operands: lhs = Expression(50, Add), rhs = Counter(2)
18+
- expression 12 operands: lhs = Counter(1), rhs = Expression(51, Sub)
19+
- expression 13 operands: lhs = Counter(0), rhs = Counter(1)
20+
- expression 14 operands: lhs = Expression(48, Add), rhs = Zero
21+
- expression 15 operands: lhs = Counter(2), rhs = Expression(49, Sub)
22+
- expression 16 operands: lhs = Expression(50, Add), rhs = Counter(2)
23+
- expression 17 operands: lhs = Counter(1), rhs = Expression(51, Sub)
24+
- expression 18 operands: lhs = Counter(0), rhs = Counter(1)
25+
- expression 19 operands: lhs = Expression(48, Add), rhs = Counter(3)
26+
- expression 20 operands: lhs = Counter(2), rhs = Expression(49, Sub)
27+
- expression 21 operands: lhs = Expression(50, Add), rhs = Counter(2)
28+
- expression 22 operands: lhs = Counter(1), rhs = Expression(51, Sub)
29+
- expression 23 operands: lhs = Counter(0), rhs = Counter(1)
30+
- expression 24 operands: lhs = Counter(3), rhs = Expression(47, Sub)
31+
- expression 25 operands: lhs = Expression(48, Add), rhs = Counter(3)
32+
- expression 26 operands: lhs = Counter(2), rhs = Expression(49, Sub)
33+
- expression 27 operands: lhs = Expression(50, Add), rhs = Counter(2)
34+
- expression 28 operands: lhs = Counter(1), rhs = Expression(51, Sub)
35+
- expression 29 operands: lhs = Counter(0), rhs = Counter(1)
36+
- expression 30 operands: lhs = Expression(46, Add), rhs = Zero
37+
- expression 31 operands: lhs = Counter(3), rhs = Expression(47, Sub)
38+
- expression 32 operands: lhs = Expression(48, Add), rhs = Counter(3)
39+
- expression 33 operands: lhs = Counter(2), rhs = Expression(49, Sub)
40+
- expression 34 operands: lhs = Expression(50, Add), rhs = Counter(2)
41+
- expression 35 operands: lhs = Counter(1), rhs = Expression(51, Sub)
42+
- expression 36 operands: lhs = Counter(0), rhs = Counter(1)
43+
- expression 37 operands: lhs = Expression(46, Add), rhs = Counter(4)
44+
- expression 38 operands: lhs = Counter(3), rhs = Expression(47, Sub)
45+
- expression 39 operands: lhs = Expression(48, Add), rhs = Counter(3)
46+
- expression 40 operands: lhs = Counter(2), rhs = Expression(49, Sub)
47+
- expression 41 operands: lhs = Expression(50, Add), rhs = Counter(2)
48+
- expression 42 operands: lhs = Counter(1), rhs = Expression(51, Sub)
49+
- expression 43 operands: lhs = Counter(0), rhs = Counter(1)
50+
- expression 44 operands: lhs = Counter(4), rhs = Expression(45, Sub)
51+
- expression 45 operands: lhs = Expression(46, Add), rhs = Counter(4)
52+
- expression 46 operands: lhs = Counter(3), rhs = Expression(47, Sub)
53+
- expression 47 operands: lhs = Expression(48, Add), rhs = Counter(3)
54+
- expression 48 operands: lhs = Counter(2), rhs = Expression(49, Sub)
55+
- expression 49 operands: lhs = Expression(50, Add), rhs = Counter(2)
56+
- expression 50 operands: lhs = Counter(1), rhs = Expression(51, Sub)
57+
- expression 51 operands: lhs = Counter(0), rhs = Counter(1)
58+
Number of file 0 mappings: 17
59+
- Code(Counter(0)) at (prev + 6, 1) to (start + 3, 10)
60+
- Code(Expression(0, Add)) at (prev + 9, 5) to (start + 1, 14)
61+
= (c0 + Zero)
62+
- Code(Counter(1)) at (prev + 1, 15) to (start + 0, 23)
63+
- Code(Expression(51, Sub)) at (prev + 0, 23) to (start + 0, 24)
64+
= (c0 - c1)
65+
- Code(Expression(50, Add)) at (prev + 2, 9) to (start + 0, 10)
66+
= (c1 + (c0 - c1))
67+
- Code(Expression(4, Add)) at (prev + 6, 5) to (start + 1, 14)
68+
= ((c1 + (c0 - c1)) + Zero)
69+
- Code(Counter(2)) at (prev + 1, 15) to (start + 0, 23)
70+
- Code(Expression(49, Sub)) at (prev + 0, 23) to (start + 0, 24)
71+
= ((c1 + (c0 - c1)) - c2)
72+
- Code(Expression(48, Add)) at (prev + 2, 9) to (start + 0, 10)
73+
= (c2 + ((c1 + (c0 - c1)) - c2))
74+
- Code(Expression(14, Add)) at (prev + 6, 5) to (start + 1, 14)
75+
= ((c2 + ((c1 + (c0 - c1)) - c2)) + Zero)
76+
- Code(Counter(3)) at (prev + 1, 15) to (start + 0, 23)
77+
- Code(Expression(47, Sub)) at (prev + 0, 23) to (start + 0, 24)
78+
= ((c2 + ((c1 + (c0 - c1)) - c2)) - c3)
79+
- Code(Expression(46, Add)) at (prev + 2, 9) to (start + 0, 10)
80+
= (c3 + ((c2 + ((c1 + (c0 - c1)) - c2)) - c3))
81+
- Code(Expression(30, Add)) at (prev + 6, 5) to (start + 1, 14)
82+
= ((c3 + ((c2 + ((c1 + (c0 - c1)) - c2)) - c3)) + Zero)
83+
- Code(Counter(4)) at (prev + 1, 15) to (start + 0, 23)
84+
- Code(Expression(45, Sub)) at (prev + 0, 23) to (start + 0, 24)
85+
= ((c3 + ((c2 + ((c1 + (c0 - c1)) - c2)) - c3)) - c4)
86+
- Code(Expression(44, Add)) at (prev + 1, 1) to (start + 0, 2)
87+
= (c4 + ((c3 + ((c2 + ((c1 + (c0 - c1)) - c2)) - c3)) - c4))
88+
89+
Function name: closure_bug::main::{closure#0}
90+
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 0d, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
91+
Number of files: 1
92+
- file 0 => global file 1
93+
Number of expressions: 2
94+
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
95+
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
96+
Number of file 0 mappings: 4
97+
- Code(Counter(0)) at (prev + 13, 9) to (start + 0, 18)
98+
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
99+
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
100+
= (c0 - c1)
101+
- Code(Expression(1, Add)) at (prev + 0, 41) to (start + 0, 42)
102+
= (c1 + (c0 - c1))
103+
104+
Function name: closure_bug::main::{closure#1}
105+
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 16, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
106+
Number of files: 1
107+
- file 0 => global file 1
108+
Number of expressions: 2
109+
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
110+
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
111+
Number of file 0 mappings: 4
112+
- Code(Counter(0)) at (prev + 22, 9) to (start + 0, 18)
113+
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
114+
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
115+
= (c0 - c1)
116+
- Code(Expression(1, Add)) at (prev + 0, 41) to (start + 0, 42)
117+
= (c1 + (c0 - c1))
118+
119+
Function name: closure_bug::main::{closure#2}
120+
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 1f, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
121+
Number of files: 1
122+
- file 0 => global file 1
123+
Number of expressions: 2
124+
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
125+
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
126+
Number of file 0 mappings: 4
127+
- Code(Counter(0)) at (prev + 31, 9) to (start + 0, 18)
128+
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
129+
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
130+
= (c0 - c1)
131+
- Code(Expression(1, Add)) at (prev + 0, 41) to (start + 0, 42)
132+
= (c1 + (c0 - c1))
133+
134+
Function name: closure_bug::main::{closure#3}
135+
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 28, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
136+
Number of files: 1
137+
- file 0 => global file 1
138+
Number of expressions: 2
139+
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
140+
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
141+
Number of file 0 mappings: 4
142+
- Code(Counter(0)) at (prev + 40, 9) to (start + 0, 18)
143+
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
144+
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
145+
= (c0 - c1)
146+
- Code(Expression(1, Add)) at (prev + 0, 41) to (start + 0, 42)
147+
= (c1 + (c0 - c1))
148+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Regression test for #115930.
2+
// All of these closures are identical, and should produce identical output in
3+
// the coverage report. However, an unstable sort was causing them to be treated
4+
// inconsistently when preparing coverage spans.
5+
6+
fn main() {
7+
let truthy = std::env::args().len() == 1;
8+
9+
let a
10+
=
11+
|
12+
|
13+
if truthy { true } else { false };
14+
15+
a();
16+
if truthy { a(); }
17+
18+
let b
19+
=
20+
|
21+
|
22+
if truthy { true } else { false };
23+
24+
b();
25+
if truthy { b(); }
26+
27+
let c
28+
=
29+
|
30+
|
31+
if truthy { true } else { false };
32+
33+
c();
34+
if truthy { c(); }
35+
36+
let d
37+
=
38+
|
39+
|
40+
if truthy { true } else { false };
41+
42+
d();
43+
if truthy { d(); }
44+
}
+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
LL| |// Regression test for #115930.
2+
LL| |// All of these closures are identical, and should produce identical output in
3+
LL| |// the coverage report. However, an unstable sort was causing them to be treated
4+
LL| |// inconsistently when preparing coverage spans.
5+
LL| |
6+
LL| 1|fn main() {
7+
LL| 1| let truthy = std::env::args().len() == 1;
8+
LL| 1|
9+
LL| 1| let a
10+
LL| | =
11+
LL| | |
12+
LL| | |
13+
LL| 2| if truthy { true } else { false };
14+
^0
15+
LL| |
16+
LL| 1| a();
17+
LL| 1| if truthy { a(); }
18+
^0
19+
LL| |
20+
LL| 1| let b
21+
LL| | =
22+
LL| | |
23+
LL| | |
24+
LL| 2| if truthy { true } else { false };
25+
^0
26+
LL| |
27+
LL| 1| b();
28+
LL| 1| if truthy { b(); }
29+
^0
30+
LL| |
31+
LL| 1| let c
32+
LL| | =
33+
LL| | |
34+
LL| | |
35+
LL| 2| if truthy { true } else { false };
36+
^0
37+
LL| |
38+
LL| 1| c();
39+
LL| 1| if truthy { c(); }
40+
^0
41+
LL| |
42+
LL| 1| let d
43+
LL| | =
44+
LL| | |
45+
LL| | |
46+
LL| 2| if truthy { true } else { false };
47+
^0
48+
LL| |
49+
LL| 1| d();
50+
LL| 1| if truthy { d(); }
51+
^0
52+
LL| 1|}
53+

tests/run-coverage/closure_bug.rs

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Regression test for #115930.
2+
// All of these closures are identical, and should produce identical output in
3+
// the coverage report. However, an unstable sort was causing them to be treated
4+
// inconsistently when preparing coverage spans.
5+
6+
fn main() {
7+
let truthy = std::env::args().len() == 1;
8+
9+
let a
10+
=
11+
|
12+
|
13+
if truthy { true } else { false };
14+
15+
a();
16+
if truthy { a(); }
17+
18+
let b
19+
=
20+
|
21+
|
22+
if truthy { true } else { false };
23+
24+
b();
25+
if truthy { b(); }
26+
27+
let c
28+
=
29+
|
30+
|
31+
if truthy { true } else { false };
32+
33+
c();
34+
if truthy { c(); }
35+
36+
let d
37+
=
38+
|
39+
|
40+
if truthy { true } else { false };
41+
42+
d();
43+
if truthy { d(); }
44+
}

0 commit comments

Comments
 (0)