From 7b70f4fe2cfb49acd98ff295264d47de0456dc42 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Tue, 27 Sep 2016 10:33:47 +0200 Subject: [PATCH] typecheck `write_value` for `ByValPair` --- src/interpreter/mod.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/interpreter/mod.rs b/src/interpreter/mod.rs index 96cc8a4e8b9..bdd812782df 100644 --- a/src/interpreter/mod.rs +++ b/src/interpreter/mod.rs @@ -1002,7 +1002,16 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { Value::ByVal(primval) => self.memory.write_primval(dest, primval), Value::ByValPair(a, b) => { self.memory.write_primval(dest, a)?; - let extra_dest = dest.offset(self.memory.pointer_size() as isize); + let layout = self.type_layout(dest_ty); + let offset = match *layout { + Layout::Univariant { ref variant, .. } => { + bug!("I don't think this can ever happen until we have custom fat pointers"); + //variant.field_offset(1).bytes() as isize + }, + Layout::FatPointer { .. } => self.memory.pointer_size() as isize, + _ => bug!("tried to write value pair of non-fat pointer type: {:?}", layout), + }; + let extra_dest = dest.offset(offset); self.memory.write_primval(extra_dest, b) } }