Skip to content

Commit 6e2e80a

Browse files
committed
coverage: Add branch coverage support for if-let and let-chains
1 parent 432ffaa commit 6e2e80a

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

compiler/rustc_mir_build/src/build/matches/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -1968,6 +1968,16 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
19681968
false,
19691969
);
19701970

1971+
// If branch coverage is enabled, record this branch.
1972+
if let Some(branch_info) = self.coverage_branch_info.as_mut() {
1973+
branch_info.add_two_way_branch(
1974+
&mut self.cfg,
1975+
SourceInfo { span: pat.span, scope: self.source_scope },
1976+
post_guard_block,
1977+
otherwise_post_guard_block,
1978+
);
1979+
}
1980+
19711981
post_guard_block.unit()
19721982
}
19731983

tests/coverage/branch/if-let.cov-map

+16-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
Function name: if_let::if_let
2-
Raw bytes (38): 0x[01, 01, 02, 05, 09, 09, 02, 06, 01, 0c, 01, 01, 10, 02, 03, 11, 00, 12, 05, 00, 16, 00, 1b, 02, 00, 1c, 02, 06, 09, 02, 0c, 02, 06, 07, 03, 05, 01, 02]
2+
Raw bytes (45): 0x[01, 01, 02, 05, 09, 09, 02, 07, 01, 0c, 01, 01, 10, 20, 02, 09, 03, 0c, 00, 13, 02, 00, 11, 00, 12, 05, 00, 16, 00, 1b, 02, 00, 1c, 02, 06, 09, 02, 0c, 02, 06, 07, 03, 05, 01, 02]
33
Number of files: 1
44
- file 0 => global file 1
55
Number of expressions: 2
66
- expression 0 operands: lhs = Counter(1), rhs = Counter(2)
77
- expression 1 operands: lhs = Counter(2), rhs = Expression(0, Sub)
8-
Number of file 0 mappings: 6
8+
Number of file 0 mappings: 7
99
- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
10-
- Code(Expression(0, Sub)) at (prev + 3, 17) to (start + 0, 18)
10+
- Branch { true: Expression(0, Sub), false: Counter(2) } at (prev + 3, 12) to (start + 0, 19)
11+
true = (c1 - c2)
12+
false = c2
13+
- Code(Expression(0, Sub)) at (prev + 0, 17) to (start + 0, 18)
1114
= (c1 - c2)
1215
- Code(Counter(1)) at (prev + 0, 22) to (start + 0, 27)
1316
- Code(Expression(0, Sub)) at (prev + 0, 28) to (start + 2, 6)
@@ -17,20 +20,26 @@ Number of file 0 mappings: 6
1720
= (c2 + (c1 - c2))
1821

1922
Function name: if_let::if_let_chain
20-
Raw bytes (52): 0x[01, 01, 04, 01, 05, 05, 09, 0f, 0d, 05, 09, 08, 01, 17, 01, 00, 33, 02, 01, 11, 00, 12, 01, 00, 16, 00, 17, 0d, 01, 15, 00, 16, 02, 00, 1a, 00, 1b, 0d, 01, 05, 03, 06, 0f, 03, 0c, 02, 06, 0b, 03, 05, 01, 02]
23+
Raw bytes (66): 0x[01, 01, 04, 01, 05, 05, 09, 0f, 0d, 05, 09, 0a, 01, 17, 01, 00, 33, 20, 02, 05, 01, 0c, 00, 13, 02, 00, 11, 00, 12, 01, 00, 16, 00, 17, 20, 0d, 09, 01, 10, 00, 17, 0d, 00, 15, 00, 16, 02, 00, 1a, 00, 1b, 0d, 01, 05, 03, 06, 0f, 03, 0c, 02, 06, 0b, 03, 05, 01, 02]
2124
Number of files: 1
2225
- file 0 => global file 1
2326
Number of expressions: 4
2427
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
2528
- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
2629
- expression 2 operands: lhs = Expression(3, Add), rhs = Counter(3)
2730
- expression 3 operands: lhs = Counter(1), rhs = Counter(2)
28-
Number of file 0 mappings: 8
31+
Number of file 0 mappings: 10
2932
- Code(Counter(0)) at (prev + 23, 1) to (start + 0, 51)
30-
- Code(Expression(0, Sub)) at (prev + 1, 17) to (start + 0, 18)
33+
- Branch { true: Expression(0, Sub), false: Counter(1) } at (prev + 1, 12) to (start + 0, 19)
34+
true = (c0 - c1)
35+
false = c1
36+
- Code(Expression(0, Sub)) at (prev + 0, 17) to (start + 0, 18)
3137
= (c0 - c1)
3238
- Code(Counter(0)) at (prev + 0, 22) to (start + 0, 23)
33-
- Code(Counter(3)) at (prev + 1, 21) to (start + 0, 22)
39+
- Branch { true: Counter(3), false: Counter(2) } at (prev + 1, 16) to (start + 0, 23)
40+
true = c3
41+
false = c2
42+
- Code(Counter(3)) at (prev + 0, 21) to (start + 0, 22)
3443
- Code(Expression(0, Sub)) at (prev + 0, 26) to (start + 0, 27)
3544
= (c0 - c1)
3645
- Code(Counter(3)) at (prev + 1, 5) to (start + 3, 6)

tests/coverage/branch/if-let.coverage

+9
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
LL| |
1515
LL| 3| if let Some(x) = input {
1616
^2
17+
------------------
18+
| Branch (LL:12): [True: 2, False: 1]
19+
------------------
1720
LL| 2| say(x);
1821
LL| 2| } else {
1922
LL| 1| say("none");
@@ -24,8 +27,14 @@
2427
LL| 15|fn if_let_chain(a: Option<&str>, b: Option<&str>) {
2528
LL| 15| if let Some(x) = a
2629
^12
30+
------------------
31+
| Branch (LL:12): [True: 12, False: 3]
32+
------------------
2733
LL| 12| && let Some(y) = b
2834
^8
35+
------------------
36+
| Branch (LL:16): [True: 8, False: 4]
37+
------------------
2938
LL| 8| {
3039
LL| 8| say(x);
3140
LL| 8| say(y);

0 commit comments

Comments
 (0)