From 2807f4f773ac3e56849474085a8203261b49c556 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Sat, 31 Mar 2018 23:06:26 +0200 Subject: [PATCH] Properly evaluate zst enum --- src/librustc_mir/interpret/eval_context.rs | 9 +++++++++ src/librustc_mir/interpret/place.rs | 1 + 2 files changed, 10 insertions(+) diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index 478f45e841d..a7cd044cec0 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -1319,6 +1319,15 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M pub fn try_read_value(&self, ptr: Pointer, ptr_align: Align, ty: Ty<'tcx>) -> EvalResult<'tcx, Option> { use syntax::ast::FloatTy; + let layout = self.layout_of(ty)?; + // do the strongest layout check of the two + let align = layout.align.max(ptr_align); + self.memory.check_align(ptr, align)?; + + if layout.size.bytes() == 0 { + return Ok(Some(Value::ByVal(PrimVal::Undef))); + } + let ptr = ptr.to_ptr()?; let val = match ty.sty { ty::TyBool => { diff --git a/src/librustc_mir/interpret/place.rs b/src/librustc_mir/interpret/place.rs index 456f5fd75db..42cb149d682 100644 --- a/src/librustc_mir/interpret/place.rs +++ b/src/librustc_mir/interpret/place.rs @@ -136,6 +136,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> { let val = [a, b][field_index]; Ok(Some((Value::ByVal(val), field.ty))) }, + // FIXME(oli-obk): figure out whether we should be calling `try_read_value` here _ => Ok(None), } }