about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2017-07-31 17:14:49 +0200
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2017-08-01 16:12:29 +0200
commit79f38bf2cdc0dced9cd383b25ea2ed004829cd4f (patch)
tree6c9138595d96a47f68611e5b056ed01e0225d1da /src
parent393216d410e70bc5a05626856a9b562a19fb33b7 (diff)
downloadrust-79f38bf2cdc0dced9cd383b25ea2ed004829cd4f.tar.gz
rust-79f38bf2cdc0dced9cd383b25ea2ed004829cd4f.zip
Process untagged unions
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/interpret/eval_context.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs
index 277e6e99e75..86e5d855f44 100644
--- a/src/librustc_mir/interpret/eval_context.rs
+++ b/src/librustc_mir/interpret/eval_context.rs
@@ -955,6 +955,8 @@ impl<'a, 'tcx, M: Machine<'tcx>> EvalContext<'a, 'tcx, M> {
                 let variant_def = adt_def.struct_variant();
                 use rustc::ty::layout::Layout::*;
                 match *self.type_layout(ty)? {
+                    UntaggedUnion { ref variants } => 
+                        Ok(TyAndPacked { ty: variant_def.fields[field_index].ty(self.tcx, substs), packed: variants.packed }),
                     Univariant { ref variant, .. } =>
                         Ok(TyAndPacked { ty: variant_def.fields[field_index].ty(self.tcx, substs), packed: variant.packed }),
                     _ => Err(EvalError::Unimplemented(format!("get_field_ty can't handle struct type: {:?}, {:?}", ty, ty.sty))),
@@ -988,8 +990,9 @@ impl<'a, 'tcx, M: Machine<'tcx>> EvalContext<'a, 'tcx, M> {
             StructWrappedNullablePointer { ref nonnull, .. } => {
                 Ok(nonnull.offsets[field_index])
             }
+            UntaggedUnion { .. } => Ok(Size::from_bytes(0)),
             _ => {
-                let msg = format!("can't handle type: {:?}, with layout: {:?}", ty, layout);
+                let msg = format!("get_field_offset: can't handle type: {:?}, with layout: {:?}", ty, layout);
                 Err(EvalError::Unimplemented(msg))
             }
         }
@@ -1006,8 +1009,9 @@ impl<'a, 'tcx, M: Machine<'tcx>> EvalContext<'a, 'tcx, M> {
             Vector { count , .. } |
             Array { count, .. } => Ok(count),
             Scalar { .. } => Ok(0),
+            UntaggedUnion { .. } => Ok(1),
             _ => {
-                let msg = format!("can't handle type: {:?}, with layout: {:?}", ty, layout);
+                let msg = format!("get_field_count: can't handle type: {:?}, with layout: {:?}", ty, layout);
                 Err(EvalError::Unimplemented(msg))
             }
         }