@@ -118,17 +118,35 @@ impl BranchInfoBuilder {
118
118
}
119
119
}
120
120
121
- fn add_two_way_branch < ' tcx > (
121
+ fn register_two_way_branch < ' tcx > (
122
122
& mut self ,
123
+ tcx : TyCtxt < ' tcx > ,
123
124
cfg : & mut CFG < ' tcx > ,
124
125
source_info : SourceInfo ,
125
126
true_block : BasicBlock ,
126
127
false_block : BasicBlock ,
127
128
) {
128
- let true_marker = self . markers . inject_block_marker ( cfg, source_info, true_block) ;
129
- let false_marker = self . markers . inject_block_marker ( cfg, source_info, false_block) ;
130
-
131
- self . branch_spans . push ( BranchSpan { span : source_info. span , true_marker, false_marker } ) ;
129
+ // Separate path for handling branches when MC/DC is enabled.
130
+ if let Some ( mcdc_info) = self . mcdc_info . as_mut ( ) {
131
+ let inject_block_marker =
132
+ |source_info, block| self . markers . inject_block_marker ( cfg, source_info, block) ;
133
+ mcdc_info. visit_evaluated_condition (
134
+ tcx,
135
+ source_info,
136
+ true_block,
137
+ false_block,
138
+ inject_block_marker,
139
+ ) ;
140
+ } else {
141
+ let true_marker = self . markers . inject_block_marker ( cfg, source_info, true_block) ;
142
+ let false_marker = self . markers . inject_block_marker ( cfg, source_info, false_block) ;
143
+
144
+ self . branch_spans . push ( BranchSpan {
145
+ span : source_info. span ,
146
+ true_marker,
147
+ false_marker,
148
+ } ) ;
149
+ }
132
150
}
133
151
134
152
pub ( crate ) fn into_done ( self ) -> Option < Box < mir:: coverage:: BranchInfo > > {
@@ -205,7 +223,14 @@ impl<'tcx> Builder<'_, 'tcx> {
205
223
mir:: TerminatorKind :: if_ ( mir:: Operand :: Copy ( place) , true_block, false_block) ,
206
224
) ;
207
225
208
- branch_info. add_two_way_branch ( & mut self . cfg , source_info, true_block, false_block) ;
226
+ // Separate path for handling branches when MC/DC is enabled.
227
+ branch_info. register_two_way_branch (
228
+ self . tcx ,
229
+ & mut self . cfg ,
230
+ source_info,
231
+ true_block,
232
+ false_block,
233
+ ) ;
209
234
210
235
let join_block = self . cfg . start_new_block ( ) ;
211
236
self . cfg . goto ( true_block, source_info, join_block) ;
@@ -236,22 +261,13 @@ impl<'tcx> Builder<'_, 'tcx> {
236
261
237
262
let source_info = SourceInfo { span : self . thir [ expr_id] . span , scope : self . source_scope } ;
238
263
239
- // Separate path for handling branches when MC/DC is enabled.
240
- if let Some ( mcdc_info) = branch_info. mcdc_info . as_mut ( ) {
241
- let inject_block_marker = |source_info, block| {
242
- branch_info. markers . inject_block_marker ( & mut self . cfg , source_info, block)
243
- } ;
244
- mcdc_info. visit_evaluated_condition (
245
- self . tcx ,
246
- source_info,
247
- then_block,
248
- else_block,
249
- inject_block_marker,
250
- ) ;
251
- return ;
252
- }
253
-
254
- branch_info. add_two_way_branch ( & mut self . cfg , source_info, then_block, else_block) ;
264
+ branch_info. register_two_way_branch (
265
+ self . tcx ,
266
+ & mut self . cfg ,
267
+ source_info,
268
+ then_block,
269
+ else_block,
270
+ ) ;
255
271
}
256
272
257
273
/// If branch coverage is enabled, inject marker statements into `true_block`
@@ -270,6 +286,12 @@ impl<'tcx> Builder<'_, 'tcx> {
270
286
// FIXME(#124144) This may need special handling when MC/DC is enabled.
271
287
272
288
let source_info = SourceInfo { span : pattern. span , scope : self . source_scope } ;
273
- branch_info. add_two_way_branch ( & mut self . cfg , source_info, true_block, false_block) ;
289
+ branch_info. register_two_way_branch (
290
+ self . tcx ,
291
+ & mut self . cfg ,
292
+ source_info,
293
+ true_block,
294
+ false_block,
295
+ ) ;
274
296
}
275
297
}
0 commit comments