stride * field
}
layout::FieldPlacement::Union(count) => {
- // This is a narrow bug-fix for rust-lang/rust#69191: if we are
- // trying to access absent field of uninhabited variant, then
- // signal UB (but don't ICE the compiler).
- // FIXME temporary hack to work around incoherence between
- // layout computation and MIR building
- if field >= count as u64 && base.layout.abi == layout::Abi::Uninhabited {
- throw_ub!(Unreachable);
- }
assert!(
field < count as u64,
"Tried to access field {} of union {:#?} with {} fields",
// bail out.
None => Place::null(&*self),
},
- layout: self.layout_of(self.subst_from_frame_and_normalize_erasing_regions(
- self.frame().body.return_ty(),
- ))?,
+ layout: self.layout_of(
+ self.subst_from_current_frame_and_normalize_erasing_regions(
+ self.frame().body.return_ty(),
+ ),
+ )?,
}
}
local => PlaceTy {
// most likey we *are* running `typeck` right now. Investigate whether we can bail out
// on `typeck_tables().has_errors` at all const eval entry points.
debug!("Size mismatch when transmuting!\nsrc: {:#?}\ndest: {:#?}", src, dest);
+ self.tcx.sess.delay_span_bug(
+ self.tcx.span,
+ "size-changing transmute, should have been caught by transmute checking",
+ );
throw_inval!(TransmuteSizeDiff(src.layout.ty, dest.layout.ty));
}
// Unsized copies rely on interpreting `src.meta` with `dest.layout`, we want