mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Rollup merge of #74411 - jonas-schievink:unbreak-mir, r=matthewjasper
Don't assign `()` to `!` MIR locals Implements the fix described in https://github.com/rust-lang/rust/issues/73860#issuecomment-651731893. Fixes https://github.com/rust-lang/rust/issues/73860 r? @matthewjasper
This commit is contained in:
commit
87d01d11e1
@ -188,10 +188,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
let ptr_ty = ptr.ty;
|
||||
// Create an *internal* temp for the pointer, so that unsafety
|
||||
// checking won't complain about the raw pointer assignment.
|
||||
let ptr_temp = this.local_decls.push(LocalDecl::with_source_info(
|
||||
ptr_ty,
|
||||
source_info,
|
||||
).internal());
|
||||
let ptr_temp = this
|
||||
.local_decls
|
||||
.push(LocalDecl::with_source_info(ptr_ty, source_info).internal());
|
||||
let ptr_temp = Place::from(ptr_temp);
|
||||
let block = unpack!(this.into(ptr_temp, block, ptr));
|
||||
this.into(this.hir.tcx().mk_place_deref(ptr_temp), block, val)
|
||||
@ -224,7 +223,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
Some((destination, success))
|
||||
},
|
||||
from_hir_call,
|
||||
fn_span
|
||||
fn_span,
|
||||
},
|
||||
);
|
||||
success.unit()
|
||||
@ -387,15 +386,18 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
// These cases don't actually need a destination
|
||||
ExprKind::Assign { .. }
|
||||
| ExprKind::AssignOp { .. }
|
||||
| ExprKind::Continue { .. }
|
||||
| ExprKind::Break { .. }
|
||||
| ExprKind::LlvmInlineAsm { .. }
|
||||
| ExprKind::Return { .. } => {
|
||||
| ExprKind::LlvmInlineAsm { .. } => {
|
||||
unpack!(block = this.stmt_expr(block, expr, None));
|
||||
this.cfg.push_assign_unit(block, source_info, destination, this.hir.tcx());
|
||||
block.unit()
|
||||
}
|
||||
|
||||
ExprKind::Continue { .. } | ExprKind::Break { .. } | ExprKind::Return { .. } => {
|
||||
unpack!(block = this.stmt_expr(block, expr, None));
|
||||
// No assign, as these have type `!`.
|
||||
block.unit()
|
||||
}
|
||||
|
||||
// Avoid creating a temporary
|
||||
ExprKind::VarRef { .. }
|
||||
| ExprKind::SelfRef
|
||||
|
@ -79,13 +79,6 @@ fn main() -> () {
|
||||
}
|
||||
|
||||
bb10: {
|
||||
_4 = const (); // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
|
||||
// ty::Const
|
||||
// + ty: ()
|
||||
// + val: Value(Scalar(<ZST>))
|
||||
// mir::Constant
|
||||
// + span: $DIR/issue-49232.rs:10:25: 10:30
|
||||
// + literal: Const { ty: (), val: Value(Scalar(<ZST>)) }
|
||||
unreachable; // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user