20d2414925
For structs that cannot be unsized, the layout algorithm sometimes moves unsized fields to the end of the struct, which circumvented the error for unexpected unsized fields and returned an unsized layout anyway. This commit makes it so that the unexpected unsized error is always returned for structs that cannot be unsized, allowing us to remove an old hack and fixing some old ICE.
18 lines
494 B
Rust
18 lines
494 B
Rust
// issue: rust-lang/rust#126939
|
|
|
|
//! This used to ICE, because the layout algorithm did not check for unsized types
|
|
//! in the struct tail of always-sized types (i.e. those that cannot be unsized)
|
|
//! and incorrectly returned an unsized layout.
|
|
|
|
struct MySlice<T>(T);
|
|
type MySliceBool = MySlice<[bool]>;
|
|
|
|
struct P2 {
|
|
b: MySliceBool,
|
|
//~^ ERROR: the size for values of type `[bool]` cannot be known at compilation time
|
|
}
|
|
|
|
static CHECK: () = assert!(align_of::<P2>() == 1);
|
|
|
|
fn main() {}
|