From 76ddede5c2d2abc4c3b97dd383fcd6809384c323 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Sun, 13 May 2018 19:52:53 +0200 Subject: [PATCH] Reintroduce some sanity checks --- src/librustc_mir/interpret/const_eval.rs | 7 +++++++ src/librustc_mir/interpret/eval_context.rs | 4 ---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/librustc_mir/interpret/const_eval.rs b/src/librustc_mir/interpret/const_eval.rs index 1f368cd3dfc1..239d9a051c6b 100644 --- a/src/librustc_mir/interpret/const_eval.rs +++ b/src/librustc_mir/interpret/const_eval.rs @@ -98,6 +98,13 @@ pub fn value_to_const_value<'tcx>( mut val: Value, ty: Ty<'tcx>, ) -> &'tcx ty::Const<'tcx> { + let layout = tcx.layout_of(ty::ParamEnv::reveal_all().and(ty)).unwrap(); + match (val, &layout.abi) { + (Value::ByRef(..), _) | + (Value::ByVal(_), &layout::Abi::Scalar(_)) | + (Value::ByValPair(..), &layout::Abi::ScalarPair(..)) => {}, + _ => bug!("bad value/layout combo: {:#?}, {:#?}", val, layout), + } let val = (|| { // Convert to ByVal or ByValPair if possible if let Value::ByRef(ptr, align) = val { diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index 03137619edaf..b91a4ba864ad 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -1416,10 +1416,6 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M let layout = self.layout_of(ty)?; self.memory.check_align(ptr, ptr_align)?; - if layout.size.bytes() == 0 { - return Ok(Some(Value::ByVal(PrimVal::Undef))); - } - let ptr = ptr.to_ptr()?; // Not the right place to do this