Skip to content

Commit 24e553e

Browse files
committed
mir: Use the new method for BasicBlockData
1 parent 9f9cd5e commit 24e553e

File tree

13 files changed

+180
-209
lines changed

13 files changed

+180
-209
lines changed

compiler/rustc_middle/src/mir/mod.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1359,7 +1359,15 @@ pub struct BasicBlockData<'tcx> {
13591359

13601360
impl<'tcx> BasicBlockData<'tcx> {
13611361
pub fn new(terminator: Option<Terminator<'tcx>>, is_cleanup: bool) -> BasicBlockData<'tcx> {
1362-
BasicBlockData { statements: vec![], terminator, is_cleanup }
1362+
BasicBlockData::new_stmts(Vec::new(), terminator, is_cleanup)
1363+
}
1364+
1365+
pub fn new_stmts(
1366+
statements: Vec<Statement<'tcx>>,
1367+
terminator: Option<Terminator<'tcx>>,
1368+
is_cleanup: bool,
1369+
) -> BasicBlockData<'tcx> {
1370+
BasicBlockData { statements, terminator, is_cleanup }
13631371
}
13641372

13651373
/// Accessor for terminator.

compiler/rustc_mir_dataflow/src/framework/tests.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ fn mock_body<'tcx>() -> mir::Body<'tcx> {
1919
let mut block = |n, kind| {
2020
let nop = mir::Statement::new(source_info, mir::StatementKind::Nop);
2121

22-
blocks.push(mir::BasicBlockData {
23-
statements: std::iter::repeat(&nop).cloned().take(n).collect(),
24-
terminator: Some(mir::Terminator { source_info, kind }),
25-
is_cleanup: false,
26-
})
22+
blocks.push(mir::BasicBlockData::new_stmts(
23+
std::iter::repeat(&nop).cloned().take(n).collect(),
24+
Some(mir::Terminator { source_info, kind }),
25+
false,
26+
))
2727
};
2828

2929
let dummy_place = mir::Place { local: mir::RETURN_PLACE, projection: ty::List::empty() };

compiler/rustc_mir_transform/src/add_call_guards.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,10 @@ impl<'tcx> crate::MirPass<'tcx> for AddCallGuards {
4444

4545
let cur_len = body.basic_blocks.len();
4646
let mut new_block = |source_info: SourceInfo, is_cleanup: bool, target: BasicBlock| {
47-
let block = BasicBlockData {
48-
statements: vec![],
47+
let block = BasicBlockData::new(
48+
Some(Terminator { source_info, kind: TerminatorKind::Goto { target } }),
4949
is_cleanup,
50-
terminator: Some(Terminator { source_info, kind: TerminatorKind::Goto { target } }),
51-
};
50+
);
5251
let idx = cur_len + new_blocks.len();
5352
new_blocks.push(block);
5453
BasicBlock::new(idx)

compiler/rustc_mir_transform/src/add_moves_for_packed_drops.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ fn add_move_for_packed_drop<'tcx>(
9393
let ty = place.ty(body, tcx).ty;
9494
let temp = patch.new_temp(ty, source_info.span);
9595

96-
let storage_dead_block = patch.new_block(BasicBlockData {
97-
statements: vec![Statement::new(source_info, StatementKind::StorageDead(temp))],
98-
terminator: Some(Terminator { source_info, kind: TerminatorKind::Goto { target } }),
96+
let storage_dead_block = patch.new_block(BasicBlockData::new_stmts(
97+
vec![Statement::new(source_info, StatementKind::StorageDead(temp))],
98+
Some(Terminator { source_info, kind: TerminatorKind::Goto { target } }),
9999
is_cleanup,
100-
});
100+
));
101101

102102
patch.add_statement(loc, StatementKind::StorageLive(temp));
103103
patch.add_assign(loc, Place::from(temp), Rvalue::Use(Operand::Move(*place)));

compiler/rustc_mir_transform/src/check_pointers.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,11 @@ fn split_block(
235235
let block_data = &mut basic_blocks[location.block];
236236

237237
// Drain every statement after this one and move the current terminator to a new basic block.
238-
let new_block = BasicBlockData {
239-
statements: block_data.statements.split_off(location.statement_index),
240-
terminator: block_data.terminator.take(),
241-
is_cleanup: block_data.is_cleanup,
242-
};
238+
let new_block = BasicBlockData::new_stmts(
239+
block_data.statements.split_off(location.statement_index),
240+
block_data.terminator.take(),
241+
block_data.is_cleanup,
242+
);
243243

244244
basic_blocks.push(new_block)
245245
}

compiler/rustc_mir_transform/src/coroutine.rs

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,11 @@ impl<'tcx> TransformVisitor<'tcx> {
257257
StatementKind::Assign(Box::new((Place::return_place(), none_value))),
258258
)];
259259

260-
body.basic_blocks_mut().push(BasicBlockData {
260+
body.basic_blocks_mut().push(BasicBlockData::new_stmts(
261261
statements,
262-
terminator: Some(Terminator { source_info, kind: TerminatorKind::Return }),
263-
is_cleanup: false,
264-
});
262+
Some(Terminator { source_info, kind: TerminatorKind::Return }),
263+
false,
264+
));
265265

266266
block
267267
}
@@ -1073,11 +1073,11 @@ fn insert_switch<'tcx>(
10731073
let source_info = SourceInfo::outermost(body.span);
10741074
body.basic_blocks_mut().raw.insert(
10751075
0,
1076-
BasicBlockData {
1077-
statements: vec![assign],
1078-
terminator: Some(Terminator { source_info, kind: switch }),
1079-
is_cleanup: false,
1080-
},
1076+
BasicBlockData::new_stmts(
1077+
vec![assign],
1078+
Some(Terminator { source_info, kind: switch }),
1079+
false,
1080+
),
10811081
);
10821082

10831083
for b in body.basic_blocks_mut().iter_mut() {
@@ -1087,11 +1087,7 @@ fn insert_switch<'tcx>(
10871087

10881088
fn insert_term_block<'tcx>(body: &mut Body<'tcx>, kind: TerminatorKind<'tcx>) -> BasicBlock {
10891089
let source_info = SourceInfo::outermost(body.span);
1090-
body.basic_blocks_mut().push(BasicBlockData {
1091-
statements: Vec::new(),
1092-
terminator: Some(Terminator { source_info, kind }),
1093-
is_cleanup: false,
1094-
})
1090+
body.basic_blocks_mut().push(BasicBlockData::new(Some(Terminator { source_info, kind }), false))
10951091
}
10961092

10971093
fn return_poll_ready_assign<'tcx>(tcx: TyCtxt<'tcx>, source_info: SourceInfo) -> Statement<'tcx> {
@@ -1112,11 +1108,11 @@ fn return_poll_ready_assign<'tcx>(tcx: TyCtxt<'tcx>, source_info: SourceInfo) ->
11121108

11131109
fn insert_poll_ready_block<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) -> BasicBlock {
11141110
let source_info = SourceInfo::outermost(body.span);
1115-
body.basic_blocks_mut().push(BasicBlockData {
1116-
statements: [return_poll_ready_assign(tcx, source_info)].to_vec(),
1117-
terminator: Some(Terminator { source_info, kind: TerminatorKind::Return }),
1118-
is_cleanup: false,
1119-
})
1111+
body.basic_blocks_mut().push(BasicBlockData::new_stmts(
1112+
[return_poll_ready_assign(tcx, source_info)].to_vec(),
1113+
Some(Terminator { source_info, kind: TerminatorKind::Return }),
1114+
false,
1115+
))
11201116
}
11211117

11221118
fn insert_panic_block<'tcx>(
@@ -1200,13 +1196,11 @@ fn generate_poison_block_and_redirect_unwinds_there<'tcx>(
12001196
body: &mut Body<'tcx>,
12011197
) {
12021198
let source_info = SourceInfo::outermost(body.span);
1203-
let poison_block = body.basic_blocks_mut().push(BasicBlockData {
1204-
statements: vec![
1205-
transform.set_discr(VariantIdx::new(CoroutineArgs::POISONED), source_info),
1206-
],
1207-
terminator: Some(Terminator { source_info, kind: TerminatorKind::UnwindResume }),
1208-
is_cleanup: true,
1209-
});
1199+
let poison_block = body.basic_blocks_mut().push(BasicBlockData::new_stmts(
1200+
vec![transform.set_discr(VariantIdx::new(CoroutineArgs::POISONED), source_info)],
1201+
Some(Terminator { source_info, kind: TerminatorKind::UnwindResume }),
1202+
true,
1203+
));
12101204

12111205
for (idx, block) in body.basic_blocks_mut().iter_enumerated_mut() {
12121206
let source_info = block.terminator().source_info;
@@ -1357,14 +1351,11 @@ fn create_cases<'tcx>(
13571351
}
13581352

13591353
// Then jump to the real target
1360-
let block = body.basic_blocks_mut().push(BasicBlockData {
1354+
let block = body.basic_blocks_mut().push(BasicBlockData::new_stmts(
13611355
statements,
1362-
terminator: Some(Terminator {
1363-
source_info,
1364-
kind: TerminatorKind::Goto { target },
1365-
}),
1366-
is_cleanup: false,
1367-
});
1356+
Some(Terminator { source_info, kind: TerminatorKind::Goto { target } }),
1357+
false,
1358+
));
13681359

13691360
(point.state, block)
13701361
})

compiler/rustc_mir_transform/src/coroutine/drop.rs

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ fn build_pin_fut<'tcx>(
102102
);
103103

104104
// call Pin<FutTy>::new_unchecked(&mut fut)
105-
let pin_fut_bb = body.basic_blocks_mut().push(BasicBlockData {
106-
statements: [storage_live, fut_ref_assign].to_vec(),
107-
terminator: Some(Terminator {
105+
let pin_fut_bb = body.basic_blocks_mut().push(BasicBlockData::new_stmts(
106+
[storage_live, fut_ref_assign].to_vec(),
107+
Some(Terminator {
108108
source_info,
109109
kind: TerminatorKind::Call {
110110
func: pin_fut_new_unchecked_fn,
@@ -116,8 +116,8 @@ fn build_pin_fut<'tcx>(
116116
fn_span: span,
117117
},
118118
}),
119-
is_cleanup: false,
120-
});
119+
false,
120+
));
121121
(pin_fut_bb, fut_pin_place)
122122
}
123123

@@ -161,9 +161,9 @@ fn build_poll_switch<'tcx>(
161161
);
162162
let storage_dead = Statement::new(source_info, StatementKind::StorageDead(fut_pin_place.local));
163163
let unreachable_block = insert_term_block(body, TerminatorKind::Unreachable);
164-
body.basic_blocks_mut().push(BasicBlockData {
165-
statements: [storage_dead, discr_assign].to_vec(),
166-
terminator: Some(Terminator {
164+
body.basic_blocks_mut().push(BasicBlockData::new_stmts(
165+
[storage_dead, discr_assign].to_vec(),
166+
Some(Terminator {
167167
source_info,
168168
kind: TerminatorKind::SwitchInt {
169169
discr: Operand::Move(poll_discr_place),
@@ -174,8 +174,8 @@ fn build_poll_switch<'tcx>(
174174
),
175175
},
176176
}),
177-
is_cleanup: false,
178-
})
177+
false,
178+
))
179179
}
180180

181181
// Gather blocks, reachable through 'drop' targets of Yield and Drop terminators (chained)
@@ -546,11 +546,8 @@ pub(super) fn insert_clean_drop<'tcx>(
546546
};
547547

548548
// Create a block to destroy an unresumed coroutines. This can only destroy upvars.
549-
body.basic_blocks_mut().push(BasicBlockData {
550-
statements: Vec::new(),
551-
terminator: Some(Terminator { source_info, kind: term }),
552-
is_cleanup: false,
553-
})
549+
body.basic_blocks_mut()
550+
.push(BasicBlockData::new(Some(Terminator { source_info, kind: term }), false))
554551
}
555552

556553
pub(super) fn create_coroutine_drop_shim<'tcx>(
@@ -729,11 +726,7 @@ pub(super) fn create_coroutine_drop_shim_proxy_async<'tcx>(
729726
body.local_decls[RETURN_PLACE] = LocalDecl::with_source_info(poll_enum, source_info);
730727

731728
// call coroutine_drop()
732-
let call_bb = body.basic_blocks_mut().push(BasicBlockData {
733-
statements: Vec::new(),
734-
terminator: None,
735-
is_cleanup: false,
736-
});
729+
let call_bb = body.basic_blocks_mut().push(BasicBlockData::new(None, false));
737730

738731
// return Poll::Ready()
739732
let ret_bb = insert_poll_ready_block(tcx, &mut body);

compiler/rustc_mir_transform/src/coverage/tests.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,13 @@ impl<'tcx> MockBlocks<'tcx> {
6868
BytePos(1)
6969
};
7070
let next_hi = next_lo + BytePos(1);
71-
self.blocks.push(BasicBlockData {
72-
statements: vec![],
73-
terminator: Some(Terminator {
71+
self.blocks.push(BasicBlockData::new(
72+
Some(Terminator {
7473
source_info: SourceInfo::outermost(Span::with_root_ctxt(next_lo, next_hi)),
7574
kind,
7675
}),
77-
is_cleanup: false,
78-
})
76+
false,
77+
))
7978
}
8079

8180
fn link(&mut self, from_block: BasicBlock, to_block: BasicBlock) {

0 commit comments

Comments
 (0)