Skip to content

Commit

Permalink
Unrolled build for rust-lang#119772
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#119772 - oli-obk:whackamole, r=compiler-errors

Fix an ICE that occurs after an error has already been reported

fixes rust-lang#117491

cc `@jswrenn`
  • Loading branch information
rust-timer committed Jan 10, 2024
2 parents 9273d63 + 4f0869e commit 61dd7f0
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 0 deletions.
1 change: 1 addition & 0 deletions compiler/rustc_transmute/src/layout/tree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ pub(crate) mod rustc {
match err {
LayoutError::Unknown(..) | LayoutError::ReferencesError(..) => Self::UnknownLayout,
LayoutError::SizeOverflow(..) => Self::SizeOverflow,
LayoutError::Cycle(err) => Self::TypeError(*err),
err => unimplemented!("{:?}", err),
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//~ ERROR: cycle detected
//! Safe transmute did not handle cycle errors that could occur during
//! layout computation. This test checks that we do not ICE in such
//! situations (see #117491).
#![crate_type = "lib"]
#![feature(transmutability)]
#![allow(dead_code, incomplete_features, non_camel_case_types)]

mod assert {
use std::mem::{Assume, BikeshedIntrinsicFrom};
pub struct Context;

pub fn is_maybe_transmutable<Src, Dst>()
where
Dst: BikeshedIntrinsicFrom<Src, Context>,
{
}
}

fn should_pad_explicitly_packed_field() {
#[repr(C)]
struct ExplicitlyPadded(ExplicitlyPadded);
//~^ ERROR: recursive type

assert::is_maybe_transmutable::<ExplicitlyPadded, ()>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
error[E0072]: recursive type `ExplicitlyPadded` has infinite size
--> $DIR/transmute_infinitely_recursive_type.rs:22:5
|
LL | struct ExplicitlyPadded(ExplicitlyPadded);
| ^^^^^^^^^^^^^^^^^^^^^^^ ---------------- recursive without indirection
|
help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to break the cycle
|
LL | struct ExplicitlyPadded(Box<ExplicitlyPadded>);
| ++++ +

error[E0391]: cycle detected when computing layout of `should_pad_explicitly_packed_field::ExplicitlyPadded`
|
= note: ...which immediately requires computing layout of `should_pad_explicitly_packed_field::ExplicitlyPadded` again
= note: cycle used when evaluating trait selection obligation `(): core::mem::transmutability::BikeshedIntrinsicFrom<should_pad_explicitly_packed_field::ExplicitlyPadded, assert::Context, core::mem::transmutability::Assume { alignment: false, lifetimes: false, safety: false, validity: false }>`
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0072, E0391.
For more information about an error, try `rustc --explain E0072`.

0 comments on commit 61dd7f0

Please sign in to comment.