Skip to content

Commit 356427f

Browse files
committed
coverage: Treat each match arm as a "branch" for branch coverage
1 parent 1b324bd commit 356427f

File tree

8 files changed

+205
-50
lines changed

8 files changed

+205
-50
lines changed

compiler/rustc_mir_build/src/build/coverageinfo.rs

+43
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use rustc_middle::mir::{self, BasicBlock, SourceInfo, SourceScope, UnOp};
77
use rustc_middle::thir::{ExprId, ExprKind, Thir};
88
use rustc_middle::ty::TyCtxt;
99
use rustc_span::def_id::LocalDefId;
10+
use rustc_span::Span;
1011

1112
use crate::build::{Builder, CFG};
1213

@@ -112,6 +113,37 @@ impl BranchInfoBuilder {
112113
]);
113114
}
114115

116+
fn visit_coverage_match_expr(
117+
&mut self,
118+
cfg: &mut CFG<'_>,
119+
scope: SourceScope,
120+
arms: impl Iterator<Item = (Span, Option<BasicBlock>)>,
121+
) {
122+
let Some(arms) = arms
123+
.map(|(span, pre_binding_block)| Some((span, pre_binding_block?)))
124+
.collect::<Option<Vec<_>>>()
125+
else {
126+
return;
127+
};
128+
129+
// Ignore match expressions that don't have at least 2 arms, since they
130+
// don't branch.
131+
if arms.len() < 2 {
132+
return;
133+
}
134+
135+
let match_arms = arms
136+
.into_iter()
137+
.map(|(span, block)| {
138+
let source_info = SourceInfo { span, scope };
139+
let marker = self.inject_block_marker(cfg, source_info, block);
140+
BranchArm { span, marker }
141+
})
142+
.collect::<Vec<_>>();
143+
144+
self.branch_arm_lists.push(match_arms);
145+
}
146+
115147
fn next_block_marker_id(&mut self) -> BlockMarkerId {
116148
let id = BlockMarkerId::from_usize(self.num_block_markers);
117149
self.num_block_markers += 1;
@@ -168,4 +200,15 @@ impl Builder<'_, '_> {
168200
else_block,
169201
);
170202
}
203+
204+
/// If branch coverage is enabled, inject marker statements into the given
205+
/// match-arm blocks, and record their IDs in the table of branches.
206+
pub(crate) fn visit_coverage_match_expr(
207+
&mut self,
208+
arms: impl Iterator<Item = (Span, Option<BasicBlock>)>,
209+
) {
210+
let Some(branch_info) = self.coverage_branch_info.as_mut() else { return };
211+
212+
branch_info.visit_coverage_match_expr(&mut self.cfg, self.source_scope, arms);
213+
}
171214
}

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

+4
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
315315
&mut candidates,
316316
);
317317

318+
self.visit_coverage_match_expr(
319+
candidates.iter().map(|c| (c.extra_data.span, c.pre_binding_block)),
320+
);
321+
318322
self.lower_match_arms(
319323
destination,
320324
scrutinee_place,

tests/coverage/branch/guard.cov-map

+30-15
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
11
Function name: guard::branch_match_guard
2-
Raw bytes (85): 0x[01, 01, 06, 19, 0d, 05, 09, 0f, 15, 13, 11, 17, 0d, 05, 09, 0d, 01, 0c, 01, 01, 10, 1d, 03, 0b, 00, 0c, 15, 01, 14, 02, 0a, 0d, 03, 0e, 00, 0f, 19, 00, 14, 00, 19, 20, 0d, 02, 00, 14, 00, 1e, 0d, 00, 1d, 02, 0a, 11, 03, 0e, 00, 0f, 1d, 00, 14, 00, 19, 20, 11, 09, 00, 14, 00, 1e, 11, 00, 1d, 02, 0a, 17, 03, 0e, 02, 0a, 0b, 04, 01, 00, 02]
2+
Raw bytes (118): 0x[01, 01, 0c, 19, 0f, 1d, 2f, 05, 09, 1d, 2f, 05, 09, 19, 0d, 05, 09, 05, 09, 27, 15, 2b, 11, 2f, 0d, 05, 09, 10, 01, 0c, 01, 01, 10, 1d, 03, 0b, 00, 0c, 20, 15, 03, 01, 09, 00, 10, 15, 00, 14, 02, 0a, 20, 19, 0f, 03, 09, 00, 10, 0d, 00, 0e, 00, 0f, 19, 00, 14, 00, 19, 20, 0d, 16, 00, 14, 00, 1e, 0d, 00, 1d, 02, 0a, 20, 1d, 2f, 03, 09, 00, 10, 11, 00, 0e, 00, 0f, 1d, 00, 14, 00, 19, 20, 11, 09, 00, 14, 00, 1e, 11, 00, 1d, 02, 0a, 2f, 03, 0e, 02, 0a, 23, 04, 01, 00, 02]
33
Number of files: 1
44
- file 0 => global file 1
5-
Number of expressions: 6
6-
- expression 0 operands: lhs = Counter(6), rhs = Counter(3)
7-
- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
8-
- expression 2 operands: lhs = Expression(3, Add), rhs = Counter(5)
9-
- expression 3 operands: lhs = Expression(4, Add), rhs = Counter(4)
10-
- expression 4 operands: lhs = Expression(5, Add), rhs = Counter(3)
11-
- expression 5 operands: lhs = Counter(1), rhs = Counter(2)
12-
Number of file 0 mappings: 13
5+
Number of expressions: 12
6+
- expression 0 operands: lhs = Counter(6), rhs = Expression(3, Add)
7+
- expression 1 operands: lhs = Counter(7), rhs = Expression(11, Add)
8+
- expression 2 operands: lhs = Counter(1), rhs = Counter(2)
9+
- expression 3 operands: lhs = Counter(7), rhs = Expression(11, Add)
10+
- expression 4 operands: lhs = Counter(1), rhs = Counter(2)
11+
- expression 5 operands: lhs = Counter(6), rhs = Counter(3)
12+
- expression 6 operands: lhs = Counter(1), rhs = Counter(2)
13+
- expression 7 operands: lhs = Counter(1), rhs = Counter(2)
14+
- expression 8 operands: lhs = Expression(9, Add), rhs = Counter(5)
15+
- expression 9 operands: lhs = Expression(10, Add), rhs = Counter(4)
16+
- expression 10 operands: lhs = Expression(11, Add), rhs = Counter(3)
17+
- expression 11 operands: lhs = Counter(1), rhs = Counter(2)
18+
Number of file 0 mappings: 16
1319
- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
1420
- Code(Counter(7)) at (prev + 3, 11) to (start + 0, 12)
15-
- Code(Counter(5)) at (prev + 1, 20) to (start + 2, 10)
16-
- Code(Counter(3)) at (prev + 3, 14) to (start + 0, 15)
21+
- Branch { true: Counter(5), false: Expression(0, Add) } at (prev + 1, 9) to (start + 0, 16)
22+
true = c5
23+
false = (c6 + (c7 + (c1 + c2)))
24+
- Code(Counter(5)) at (prev + 0, 20) to (start + 2, 10)
25+
- Branch { true: Counter(6), false: Expression(3, Add) } at (prev + 3, 9) to (start + 0, 16)
26+
true = c6
27+
false = (c7 + (c1 + c2))
28+
- Code(Counter(3)) at (prev + 0, 14) to (start + 0, 15)
1729
- Code(Counter(6)) at (prev + 0, 20) to (start + 0, 25)
18-
- Branch { true: Counter(3), false: Expression(0, Sub) } at (prev + 0, 20) to (start + 0, 30)
30+
- Branch { true: Counter(3), false: Expression(5, Sub) } at (prev + 0, 20) to (start + 0, 30)
1931
true = c3
2032
false = (c6 - c3)
2133
- Code(Counter(3)) at (prev + 0, 29) to (start + 2, 10)
22-
- Code(Counter(4)) at (prev + 3, 14) to (start + 0, 15)
34+
- Branch { true: Counter(7), false: Expression(11, Add) } at (prev + 3, 9) to (start + 0, 16)
35+
true = c7
36+
false = (c1 + c2)
37+
- Code(Counter(4)) at (prev + 0, 14) to (start + 0, 15)
2338
- Code(Counter(7)) at (prev + 0, 20) to (start + 0, 25)
2439
- Branch { true: Counter(4), false: Counter(2) } at (prev + 0, 20) to (start + 0, 30)
2540
true = c4
2641
false = c2
2742
- Code(Counter(4)) at (prev + 0, 29) to (start + 2, 10)
28-
- Code(Expression(5, Add)) at (prev + 3, 14) to (start + 2, 10)
43+
- Code(Expression(11, Add)) at (prev + 3, 14) to (start + 2, 10)
2944
= (c1 + c2)
30-
- Code(Expression(2, Add)) at (prev + 4, 1) to (start + 0, 2)
45+
- Code(Expression(8, Add)) at (prev + 4, 1) to (start + 0, 2)
3146
= ((((c1 + c2) + c3) + c4) + c5)
3247

tests/coverage/branch/guard.coverage

+5
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,22 @@
1414
LL| |
1515
LL| 1| match x {
1616
LL| 1| Some(0) => {
17+
------------------
18+
| Branch (LL:9): [True: 1, False: 4]
19+
------------------
1720
LL| 1| println!("zero");
1821
LL| 1| }
1922
LL| 3| Some(x) if x % 2 == 0 => {
2023
^2
2124
------------------
25+
| Branch (LL:9): [True: 3, False: 1]
2226
| Branch (LL:20): [True: 2, False: 1]
2327
------------------
2428
LL| 2| println!("is nonzero and even");
2529
LL| 2| }
2630
LL| 1| Some(x) if x % 3 == 0 => {
2731
------------------
32+
| Branch (LL:9): [True: 1, False: 0]
2833
| Branch (LL:20): [True: 1, False: 0]
2934
------------------
3035
LL| 1| println!("is nonzero and odd, but divisible by 3");

tests/coverage/branch/match-arms.cov-map

+93-31
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,122 @@
11
Function name: match_arms::guards
2-
Raw bytes (88): 0x[01, 01, 08, 07, 15, 0b, 11, 0f, 0d, 00, 09, 17, 25, 1b, 21, 1f, 1d, 03, 19, 0c, 01, 30, 01, 01, 10, 29, 03, 0b, 00, 10, 19, 01, 11, 00, 29, 20, 19, 09, 00, 17, 00, 1b, 1d, 01, 11, 00, 29, 20, 1d, 0d, 00, 17, 00, 1b, 21, 01, 11, 00, 29, 20, 21, 11, 00, 17, 00, 1b, 25, 01, 11, 00, 29, 20, 25, 15, 00, 17, 00, 1b, 03, 01, 0e, 00, 18, 13, 03, 05, 01, 02]
2+
Raw bytes (180): 0x[01, 01, 22, 31, 1f, 2d, 37, 29, 7b, 7f, 15, 83, 01, 11, 87, 01, 0d, 00, 09, 2d, 37, 29, 7b, 7f, 15, 83, 01, 11, 87, 01, 0d, 00, 09, 29, 7b, 7f, 15, 83, 01, 11, 87, 01, 0d, 00, 09, 7f, 15, 83, 01, 11, 87, 01, 0d, 00, 09, 7f, 15, 83, 01, 11, 87, 01, 0d, 00, 09, 6f, 25, 73, 21, 77, 1d, 7b, 19, 7f, 15, 83, 01, 11, 87, 01, 0d, 00, 09, 10, 01, 30, 01, 01, 10, 29, 03, 0b, 00, 10, 20, 35, 03, 01, 09, 00, 13, 19, 00, 11, 00, 29, 20, 19, 09, 00, 17, 00, 1b, 20, 31, 1f, 01, 09, 00, 13, 1d, 00, 11, 00, 29, 20, 1d, 0d, 00, 17, 00, 1b, 20, 2d, 37, 01, 09, 00, 13, 21, 00, 11, 00, 29, 20, 21, 11, 00, 17, 00, 1b, 20, 29, 7b, 01, 09, 00, 13, 25, 00, 11, 00, 29, 20, 25, 15, 00, 17, 00, 1b, 7b, 01, 0e, 00, 18, 6b, 03, 05, 01, 02]
33
Number of files: 1
44
- file 0 => global file 1
5-
Number of expressions: 8
6-
- expression 0 operands: lhs = Expression(1, Add), rhs = Counter(5)
7-
- expression 1 operands: lhs = Expression(2, Add), rhs = Counter(4)
8-
- expression 2 operands: lhs = Expression(3, Add), rhs = Counter(3)
9-
- expression 3 operands: lhs = Zero, rhs = Counter(2)
10-
- expression 4 operands: lhs = Expression(5, Add), rhs = Counter(9)
11-
- expression 5 operands: lhs = Expression(6, Add), rhs = Counter(8)
12-
- expression 6 operands: lhs = Expression(7, Add), rhs = Counter(7)
13-
- expression 7 operands: lhs = Expression(0, Add), rhs = Counter(6)
14-
Number of file 0 mappings: 12
5+
Number of expressions: 34
6+
- expression 0 operands: lhs = Counter(12), rhs = Expression(7, Add)
7+
- expression 1 operands: lhs = Counter(11), rhs = Expression(13, Add)
8+
- expression 2 operands: lhs = Counter(10), rhs = Expression(30, Add)
9+
- expression 3 operands: lhs = Expression(31, Add), rhs = Counter(5)
10+
- expression 4 operands: lhs = Expression(32, Add), rhs = Counter(4)
11+
- expression 5 operands: lhs = Expression(33, Add), rhs = Counter(3)
12+
- expression 6 operands: lhs = Zero, rhs = Counter(2)
13+
- expression 7 operands: lhs = Counter(11), rhs = Expression(13, Add)
14+
- expression 8 operands: lhs = Counter(10), rhs = Expression(30, Add)
15+
- expression 9 operands: lhs = Expression(31, Add), rhs = Counter(5)
16+
- expression 10 operands: lhs = Expression(32, Add), rhs = Counter(4)
17+
- expression 11 operands: lhs = Expression(33, Add), rhs = Counter(3)
18+
- expression 12 operands: lhs = Zero, rhs = Counter(2)
19+
- expression 13 operands: lhs = Counter(10), rhs = Expression(30, Add)
20+
- expression 14 operands: lhs = Expression(31, Add), rhs = Counter(5)
21+
- expression 15 operands: lhs = Expression(32, Add), rhs = Counter(4)
22+
- expression 16 operands: lhs = Expression(33, Add), rhs = Counter(3)
23+
- expression 17 operands: lhs = Zero, rhs = Counter(2)
24+
- expression 18 operands: lhs = Expression(31, Add), rhs = Counter(5)
25+
- expression 19 operands: lhs = Expression(32, Add), rhs = Counter(4)
26+
- expression 20 operands: lhs = Expression(33, Add), rhs = Counter(3)
27+
- expression 21 operands: lhs = Zero, rhs = Counter(2)
28+
- expression 22 operands: lhs = Expression(31, Add), rhs = Counter(5)
29+
- expression 23 operands: lhs = Expression(32, Add), rhs = Counter(4)
30+
- expression 24 operands: lhs = Expression(33, Add), rhs = Counter(3)
31+
- expression 25 operands: lhs = Zero, rhs = Counter(2)
32+
- expression 26 operands: lhs = Expression(27, Add), rhs = Counter(9)
33+
- expression 27 operands: lhs = Expression(28, Add), rhs = Counter(8)
34+
- expression 28 operands: lhs = Expression(29, Add), rhs = Counter(7)
35+
- expression 29 operands: lhs = Expression(30, Add), rhs = Counter(6)
36+
- expression 30 operands: lhs = Expression(31, Add), rhs = Counter(5)
37+
- expression 31 operands: lhs = Expression(32, Add), rhs = Counter(4)
38+
- expression 32 operands: lhs = Expression(33, Add), rhs = Counter(3)
39+
- expression 33 operands: lhs = Zero, rhs = Counter(2)
40+
Number of file 0 mappings: 16
1541
- Code(Counter(0)) at (prev + 48, 1) to (start + 1, 16)
1642
- Code(Counter(10)) at (prev + 3, 11) to (start + 0, 16)
17-
- Code(Counter(6)) at (prev + 1, 17) to (start + 0, 41)
43+
- Branch { true: Counter(13), false: Expression(0, Add) } at (prev + 1, 9) to (start + 0, 19)
44+
true = c13
45+
false = (c12 + (c11 + (c10 + ((((Zero + c2) + c3) + c4) + c5))))
46+
- Code(Counter(6)) at (prev + 0, 17) to (start + 0, 41)
1847
- Branch { true: Counter(6), false: Counter(2) } at (prev + 0, 23) to (start + 0, 27)
1948
true = c6
2049
false = c2
21-
- Code(Counter(7)) at (prev + 1, 17) to (start + 0, 41)
50+
- Branch { true: Counter(12), false: Expression(7, Add) } at (prev + 1, 9) to (start + 0, 19)
51+
true = c12
52+
false = (c11 + (c10 + ((((Zero + c2) + c3) + c4) + c5)))
53+
- Code(Counter(7)) at (prev + 0, 17) to (start + 0, 41)
2254
- Branch { true: Counter(7), false: Counter(3) } at (prev + 0, 23) to (start + 0, 27)
2355
true = c7
2456
false = c3
25-
- Code(Counter(8)) at (prev + 1, 17) to (start + 0, 41)
57+
- Branch { true: Counter(11), false: Expression(13, Add) } at (prev + 1, 9) to (start + 0, 19)
58+
true = c11
59+
false = (c10 + ((((Zero + c2) + c3) + c4) + c5))
60+
- Code(Counter(8)) at (prev + 0, 17) to (start + 0, 41)
2661
- Branch { true: Counter(8), false: Counter(4) } at (prev + 0, 23) to (start + 0, 27)
2762
true = c8
2863
false = c4
29-
- Code(Counter(9)) at (prev + 1, 17) to (start + 0, 41)
64+
- Branch { true: Counter(10), false: Expression(30, Add) } at (prev + 1, 9) to (start + 0, 19)
65+
true = c10
66+
false = ((((Zero + c2) + c3) + c4) + c5)
67+
- Code(Counter(9)) at (prev + 0, 17) to (start + 0, 41)
3068
- Branch { true: Counter(9), false: Counter(5) } at (prev + 0, 23) to (start + 0, 27)
3169
true = c9
3270
false = c5
33-
- Code(Expression(0, Add)) at (prev + 1, 14) to (start + 0, 24)
71+
- Code(Expression(30, Add)) at (prev + 1, 14) to (start + 0, 24)
3472
= ((((Zero + c2) + c3) + c4) + c5)
35-
- Code(Expression(4, Add)) at (prev + 3, 5) to (start + 1, 2)
73+
- Code(Expression(26, Add)) at (prev + 3, 5) to (start + 1, 2)
3674
= ((((((((Zero + c2) + c3) + c4) + c5) + c6) + c7) + c8) + c9)
3775

3876
Function name: match_arms::match_arms
39-
Raw bytes (51): 0x[01, 01, 06, 05, 07, 0b, 11, 09, 0d, 13, 02, 17, 09, 11, 0d, 07, 01, 18, 01, 01, 10, 05, 03, 0b, 00, 10, 11, 01, 11, 00, 21, 0d, 01, 11, 00, 21, 09, 01, 11, 00, 21, 02, 01, 11, 00, 21, 0f, 03, 05, 01, 02]
77+
Raw bytes (102): 0x[01, 01, 15, 0d, 17, 09, 4a, 05, 4f, 53, 11, 09, 0d, 09, 4a, 05, 4f, 53, 11, 09, 0d, 05, 4f, 53, 11, 09, 0d, 05, 4f, 53, 11, 09, 0d, 43, 4a, 47, 09, 11, 0d, 05, 4f, 53, 11, 09, 0d, 0a, 01, 18, 01, 01, 10, 05, 03, 0b, 00, 10, 20, 11, 03, 01, 09, 00, 13, 11, 00, 11, 00, 21, 20, 0d, 17, 01, 09, 00, 13, 0d, 00, 11, 00, 21, 20, 09, 4a, 01, 09, 00, 13, 09, 00, 11, 00, 21, 4a, 01, 11, 00, 21, 3f, 03, 05, 01, 02]
4078
Number of files: 1
4179
- file 0 => global file 1
42-
Number of expressions: 6
43-
- expression 0 operands: lhs = Counter(1), rhs = Expression(1, Add)
44-
- expression 1 operands: lhs = Expression(2, Add), rhs = Counter(4)
45-
- expression 2 operands: lhs = Counter(2), rhs = Counter(3)
46-
- expression 3 operands: lhs = Expression(4, Add), rhs = Expression(0, Sub)
47-
- expression 4 operands: lhs = Expression(5, Add), rhs = Counter(2)
48-
- expression 5 operands: lhs = Counter(4), rhs = Counter(3)
49-
Number of file 0 mappings: 7
80+
Number of expressions: 21
81+
- expression 0 operands: lhs = Counter(3), rhs = Expression(5, Add)
82+
- expression 1 operands: lhs = Counter(2), rhs = Expression(18, Sub)
83+
- expression 2 operands: lhs = Counter(1), rhs = Expression(19, Add)
84+
- expression 3 operands: lhs = Expression(20, Add), rhs = Counter(4)
85+
- expression 4 operands: lhs = Counter(2), rhs = Counter(3)
86+
- expression 5 operands: lhs = Counter(2), rhs = Expression(18, Sub)
87+
- expression 6 operands: lhs = Counter(1), rhs = Expression(19, Add)
88+
- expression 7 operands: lhs = Expression(20, Add), rhs = Counter(4)
89+
- expression 8 operands: lhs = Counter(2), rhs = Counter(3)
90+
- expression 9 operands: lhs = Counter(1), rhs = Expression(19, Add)
91+
- expression 10 operands: lhs = Expression(20, Add), rhs = Counter(4)
92+
- expression 11 operands: lhs = Counter(2), rhs = Counter(3)
93+
- expression 12 operands: lhs = Counter(1), rhs = Expression(19, Add)
94+
- expression 13 operands: lhs = Expression(20, Add), rhs = Counter(4)
95+
- expression 14 operands: lhs = Counter(2), rhs = Counter(3)
96+
- expression 15 operands: lhs = Expression(16, Add), rhs = Expression(18, Sub)
97+
- expression 16 operands: lhs = Expression(17, Add), rhs = Counter(2)
98+
- expression 17 operands: lhs = Counter(4), rhs = Counter(3)
99+
- expression 18 operands: lhs = Counter(1), rhs = Expression(19, Add)
100+
- expression 19 operands: lhs = Expression(20, Add), rhs = Counter(4)
101+
- expression 20 operands: lhs = Counter(2), rhs = Counter(3)
102+
Number of file 0 mappings: 10
50103
- Code(Counter(0)) at (prev + 24, 1) to (start + 1, 16)
51104
- Code(Counter(1)) at (prev + 3, 11) to (start + 0, 16)
52-
- Code(Counter(4)) at (prev + 1, 17) to (start + 0, 33)
53-
- Code(Counter(3)) at (prev + 1, 17) to (start + 0, 33)
54-
- Code(Counter(2)) at (prev + 1, 17) to (start + 0, 33)
55-
- Code(Expression(0, Sub)) at (prev + 1, 17) to (start + 0, 33)
105+
- Branch { true: Counter(4), false: Expression(0, Add) } at (prev + 1, 9) to (start + 0, 19)
106+
true = c4
107+
false = (c3 + (c2 + (c1 - ((c2 + c3) + c4))))
108+
- Code(Counter(4)) at (prev + 0, 17) to (start + 0, 33)
109+
- Branch { true: Counter(3), false: Expression(5, Add) } at (prev + 1, 9) to (start + 0, 19)
110+
true = c3
111+
false = (c2 + (c1 - ((c2 + c3) + c4)))
112+
- Code(Counter(3)) at (prev + 0, 17) to (start + 0, 33)
113+
- Branch { true: Counter(2), false: Expression(18, Sub) } at (prev + 1, 9) to (start + 0, 19)
114+
true = c2
115+
false = (c1 - ((c2 + c3) + c4))
116+
- Code(Counter(2)) at (prev + 0, 17) to (start + 0, 33)
117+
- Code(Expression(18, Sub)) at (prev + 1, 17) to (start + 0, 33)
56118
= (c1 - ((c2 + c3) + c4))
57-
- Code(Expression(3, Add)) at (prev + 3, 5) to (start + 1, 2)
119+
- Code(Expression(15, Add)) at (prev + 3, 5) to (start + 1, 2)
58120
= (((c4 + c3) + c2) + (c1 - ((c2 + c3) + c4)))
59121

60122
Function name: match_arms::or_patterns

tests/coverage/branch/match-arms.coverage

+13-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,17 @@
2626
LL| |
2727
LL| 15| match value {
2828
LL| 8| Enum::D(d) => consume(d),
29+
------------------
30+
| Branch (LL:9): [True: 8, False: 7]
31+
------------------
2932
LL| 4| Enum::C(c) => consume(c),
33+
------------------
34+
| Branch (LL:9): [True: 4, False: 3]
35+
------------------
3036
LL| 2| Enum::B(b) => consume(b),
37+
------------------
38+
| Branch (LL:9): [True: 2, False: 1]
39+
------------------
3140
LL| 1| Enum::A(a) => consume(a),
3241
LL| | }
3342
LL| |
@@ -53,18 +62,22 @@
5362
LL| 3| match value {
5463
LL| 8| Enum::D(d) if cond => consume(d),
5564
------------------
65+
| Branch (LL:9): [True: 24, False: 51]
5666
| Branch (LL:23): [True: 8, False: 16]
5767
------------------
5868
LL| 4| Enum::C(c) if cond => consume(c),
5969
------------------
70+
| Branch (LL:9): [True: 12, False: 39]
6071
| Branch (LL:23): [True: 4, False: 8]
6172
------------------
6273
LL| 2| Enum::B(b) if cond => consume(b),
6374
------------------
75+
| Branch (LL:9): [True: 6, False: 33]
6476
| Branch (LL:23): [True: 2, False: 4]
6577
------------------
6678
LL| 1| Enum::A(a) if cond => consume(a),
6779
------------------
80+
| Branch (LL:9): [True: 3, False: 30]
6881
| Branch (LL:23): [True: 1, False: 2]
6982
------------------
7083
LL| 30| _ => consume(0),
@@ -100,6 +113,4 @@
100113
LL| | call_everything(Enum::D(d));
101114
LL| | }
102115
LL| |}
103-
LL| |
104-
LL| |// FIXME(#124118) Actually instrument match arms for branch coverage.
105116

tests/coverage/branch/match-arms.rs

-2
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,3 @@ fn main() {
8686
call_everything(Enum::D(d));
8787
}
8888
}
89-
90-
// FIXME(#124118) Actually instrument match arms for branch coverage.

0 commit comments

Comments
 (0)