diff --git a/rust-version b/rust-version index 937073ef4f..e9b00f6497 100644 --- a/rust-version +++ b/rust-version @@ -1 +1 @@ -df768c5c8fcb361c4dc94b4c776d6a78c12862e1 +b2c1a606feb1fbdb0ac0acba76f881ef172ed474 diff --git a/src/helpers.rs b/src/helpers.rs index 9f46a0c1ce..40a33f09a8 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -1,5 +1,6 @@ use std::convert::TryFrom; use std::mem; +use std::num::NonZeroUsize; use log::trace; @@ -333,17 +334,15 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx places.sort_by_key(|place| place.ptr.assert_ptr().offset); self.walk_aggregate(place, places.into_iter().map(Ok)) } - FieldsShape::Union { .. } => { + FieldsShape::Union { .. } | FieldsShape::Primitive => { // Uh, what? - bug!("a union is not an aggregate we should ever visit") + bug!("unions/primitives are not aggregates we should ever visit") } } } // We have to do *something* for unions. - fn visit_union(&mut self, v: MPlaceTy<'tcx, Tag>, fields: usize) -> InterpResult<'tcx> { - assert!(fields > 0); // we should never reach "pseudo-unions" with 0 fields, like primitives - + fn visit_union(&mut self, v: MPlaceTy<'tcx, Tag>, _fields: NonZeroUsize) -> InterpResult<'tcx> { // With unions, we fall back to whatever the type says, to hopefully be consistent // with LLVM IR. // FIXME: are we consistent, and is this really the behavior we want?