// rust-lang/rust#60431: This is a scenario where to determine the size of // `&Ref`, we need to know the concrete type of the last field in // `Ref` (i.e. its "struct tail"), and determining that concrete type // requires normalizing `Obstack::Dyn`. // // The old "struct tail" computation did not perform such normalization, and so // the compiler would ICE when trying to figure out if `Ref` is a // dynamically-sized type (DST). // run-pass use std::mem; pub trait Arena { type Dyn : ?Sized; } pub struct DynRef { _dummy: [()], } pub struct Ref { _value: u8, _dyn_arena: A::Dyn, } pub struct Obstack; impl Arena for Obstack { type Dyn = DynRef; } fn main() { assert_eq!(mem::size_of::<&Ref>(), mem::size_of::<&[()]>()); }