Skip to content

Commit 03e95ae

Browse files
committed
Miri shouldn't look at types
1 parent d19a359 commit 03e95ae

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

src/librustc_mir/interpret/eval_context.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -385,15 +385,19 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
385385
local: mir::Local,
386386
layout: Option<TyLayout<'tcx>>,
387387
) -> InterpResult<'tcx, TyLayout<'tcx>> {
388-
match frame.locals[local].layout.get() {
388+
// `const_prop` runs into this with an invalid (empty) frame, so we
389+
// have to support that case (mostly by skipping all caching).
390+
match frame.locals.get(local).and_then(|state| state.layout.get()) {
389391
None => {
390392
let layout = crate::interpret::operand::from_known_layout(layout, || {
391393
let local_ty = frame.body.local_decls[local].ty;
392394
let local_ty = self.monomorphize_with_substs(local_ty, frame.instance.substs)?;
393395
self.layout_of(local_ty)
394396
})?;
395-
// Layouts of locals are requested a lot, so we cache them.
396-
frame.locals[local].layout.set(Some(layout));
397+
if let Some(state) = frame.locals.get(local) {
398+
// Layouts of locals are requested a lot, so we cache them.
399+
state.layout.set(Some(layout));
400+
}
397401
Ok(layout)
398402
}
399403
Some(layout) => Ok(layout),

src/librustc_mir/interpret/terminator.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,11 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
405405
}
406406
} else {
407407
let local = mir::RETURN_PLACE;
408-
let ty = self.frame().body.local_decls[local].ty;
409-
if !self.tcx.is_ty_uninhabited_from_any_module(ty) {
410-
throw_unsup!(FunctionRetMismatch(self.tcx.types.never, ty))
408+
let callee_layout = self.layout_of_local(self.frame(), local, None)?;
409+
if !callee_layout.abi.is_uninhabited() {
410+
throw_unsup!(FunctionRetMismatch(
411+
self.tcx.types.never, callee_layout.ty
412+
))
411413
}
412414
}
413415
Ok(())

0 commit comments

Comments
 (0)