about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2018-01-25 12:12:19 +0100
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2018-03-08 08:34:09 +0100
commit3d8c4d4fe9358d23d9edd6ac016477f91f1de997 (patch)
tree29f1a6171b8573601eb029c3e67b1255d454fc3b
parentd26ebec81ce5d450f1bf3065ae990e6b1ca1c551 (diff)
downloadrust-3d8c4d4fe9358d23d9edd6ac016477f91f1de997.tar.gz
rust-3d8c4d4fe9358d23d9edd6ac016477f91f1de997.zip
Don't read from zero sized fields
-rw-r--r--src/librustc_mir/interpret/place.rs3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/librustc_mir/interpret/place.rs b/src/librustc_mir/interpret/place.rs
index e82a252a95b..4ca68068728 100644
--- a/src/librustc_mir/interpret/place.rs
+++ b/src/librustc_mir/interpret/place.rs
@@ -123,6 +123,9 @@ impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> {
         }
         let field_index = field.index();
         let field = base_layout.field(self, field_index)?;
+        if field.size.bytes() == 0 {
+            return Ok(Some((Value::ByVal(PrimVal::Undef), field.ty)))
+        }
         let offset = base_layout.fields.offset(field_index);
         match base {
             // the field covers the entire type