Rollup merge of #111501 - WaffleLapkin:drivebycleanupuwu, r=oli-obk
MIR drive-by cleanups Some random drive-by cleanups I did while working with MIR/THIR.
This commit is contained in:
commit
df86200965
21 changed files with 124 additions and 179 deletions
|
@ -644,24 +644,27 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
|||
}
|
||||
};
|
||||
|
||||
if let Some(destination) = destination {
|
||||
if let Some(value) = value {
|
||||
match (destination, value) {
|
||||
(Some(destination), Some(value)) => {
|
||||
debug!("stmt_expr Break val block_context.push(SubExpr)");
|
||||
self.block_context.push(BlockFrame::SubExpr);
|
||||
unpack!(block = self.expr_into_dest(destination, block, value));
|
||||
self.block_context.pop();
|
||||
} else {
|
||||
}
|
||||
(Some(destination), None) => {
|
||||
self.cfg.push_assign_unit(block, source_info, destination, self.tcx)
|
||||
}
|
||||
} else {
|
||||
assert!(value.is_none(), "`return` and `break` should have a destination");
|
||||
if self.tcx.sess.instrument_coverage() {
|
||||
(None, Some(_)) => {
|
||||
panic!("`return`, `become` and `break` with value and must have a destination")
|
||||
}
|
||||
(None, None) if self.tcx.sess.instrument_coverage() => {
|
||||
// Unlike `break` and `return`, which push an `Assign` statement to MIR, from which
|
||||
// a Coverage code region can be generated, `continue` needs no `Assign`; but
|
||||
// without one, the `InstrumentCoverage` MIR pass cannot generate a code region for
|
||||
// `continue`. Coverage will be missing unless we add a dummy `Assign` to MIR.
|
||||
self.add_dummy_assignment(span, block, source_info);
|
||||
}
|
||||
(None, None) => {}
|
||||
}
|
||||
|
||||
let region_scope = self.scopes.breakable_scopes[break_index].region_scope;
|
||||
|
@ -671,12 +674,12 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
|||
} else {
|
||||
self.scopes.breakable_scopes[break_index].continue_drops.as_mut().unwrap()
|
||||
};
|
||||
let mut drop_idx = ROOT_NODE;
|
||||
for scope in &self.scopes.scopes[scope_index + 1..] {
|
||||
for drop in &scope.drops {
|
||||
drop_idx = drops.add_drop(*drop, drop_idx);
|
||||
}
|
||||
}
|
||||
|
||||
let drop_idx = self.scopes.scopes[scope_index + 1..]
|
||||
.iter()
|
||||
.flat_map(|scope| &scope.drops)
|
||||
.fold(ROOT_NODE, |drop_idx, &drop| drops.add_drop(drop, drop_idx));
|
||||
|
||||
drops.add_entry(block, drop_idx);
|
||||
|
||||
// `build_drop_trees` doesn't have access to our source_info, so we
|
||||
|
|
|
@ -130,6 +130,7 @@ impl<'tcx> Cx<'tcx> {
|
|||
ExprKind::Pointer { cast: PointerCast::Unsize, source: self.thir.exprs.push(expr) }
|
||||
}
|
||||
Adjust::Pointer(cast) => ExprKind::Pointer { cast, source: self.thir.exprs.push(expr) },
|
||||
Adjust::NeverToAny if adjustment.target.is_never() => return expr,
|
||||
Adjust::NeverToAny => ExprKind::NeverToAny { source: self.thir.exprs.push(expr) },
|
||||
Adjust::Deref(None) => {
|
||||
adjust_span(&mut expr);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue