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.
26 lines
555 B
Rust
26 lines
555 B
Rust
// issue: #127737
|
|
//@ check-pass
|
|
//@ compile-flags: -Zmir-opt-level=5 --crate-type lib
|
|
|
|
//! This test is very similar to `invalid-unsized-const-eval.rs`, but also requires
|
|
//! checking for unsized types in the last field of each enum variant.
|
|
|
|
pub trait TestTrait {
|
|
type MyType;
|
|
fn func() -> Option<Self>
|
|
where
|
|
Self: Sized;
|
|
}
|
|
|
|
impl<T> dyn TestTrait<MyType = T>
|
|
where
|
|
Self: Sized,
|
|
{
|
|
pub fn other_func() -> Option<Self> {
|
|
match Self::func() {
|
|
Some(me) => Some(me),
|
|
None => None,
|
|
}
|
|
}
|
|
}
|