Skip to content

Commit

Permalink
Rollup merge of #114542 - RalfJung:const-prop-nonsense, r=compiler-er…
Browse files Browse the repository at this point in the history
…rors

interpret: use ConstPropNonsense for more const-prop induced issues
  • Loading branch information
matthiaskrgr authored Aug 6, 2023
2 parents 22d142a + efd54cc commit 74dce18
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 4 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_const_eval/src/interpret/place.rs
Original file line number Diff line number Diff line change
Expand Up @@ -826,10 +826,10 @@ where
// predicate like `where Self: Sized` with `Self = dyn Trait`.
// See #102553 for an example of such a predicate.
if src.layout().is_unsized() {
throw_inval!(SizeOfUnsizedType(src.layout().ty));
throw_inval!(ConstPropNonsense);
}
if dest.layout().is_unsized() {
throw_inval!(SizeOfUnsizedType(dest.layout().ty));
throw_inval!(ConstPropNonsense);
}
assert_eq!(src.layout().size, dest.layout().size);
// Yay, we got a value that we can write directly.
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_const_eval/src/interpret/projection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ where
let (meta, offset) = if field_layout.is_unsized() {
if base.layout().is_sized() {
// An unsized field of a sized type? Sure...
// But const-prop actually feeds us such nonsense MIR!
// But const-prop actually feeds us such nonsense MIR! (see test `const_prop/issue-86351.rs`)
throw_inval!(ConstPropNonsense);
}
let base_meta = base.meta(self)?;
Expand Down
3 changes: 2 additions & 1 deletion compiler/rustc_const_eval/src/interpret/step.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,8 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
let ty = self.subst_from_current_frame_and_normalize_erasing_regions(ty)?;
let layout = self.layout_of(ty)?;
if let mir::NullOp::SizeOf | mir::NullOp::AlignOf = null_op && layout.is_unsized() {
// FIXME: This should be a span_bug (#80742)
// FIXME: This should be a span_bug, but const generics can run MIR
// that is not properly type-checked yet (#97477).
self.tcx.sess.delay_span_bug(
self.frame().current_span(),
format!("{null_op:?} MIR operator called for unsized type {ty}"),
Expand Down

0 comments on commit 74dce18

Please sign in to comment.