// This is a regression test for issues that came up during review of the (closed) // PR #132289; this single-crate test case is // the first example from @steffahn during review. // https://github.com/rust-lang/rust/pull/132289#issuecomment-2564492153 //@ check-pass type A = &'static [usize; 1]; type B = &'static [usize; 100]; type DynSomething = dyn Something; trait Super { type Assoc; } impl Super for Foo { type Assoc = A; } trait IsDynSomething {} impl IsDynSomething for DynSomething {} impl Super for T where T: IsDynSomething, { type Assoc = B; } trait Something: Super { fn method(&self) -> Self::Assoc; } struct Foo; impl Something for Foo { fn method(&self) -> Self::Assoc { &[1337] } } fn main() { let x = &Foo; let y: &DynSomething = x; // no surprises here let _arr1: A = x.method(); // this (`_arr2`) can't ever become B either, soundly let _arr2: A = y.method(); // there aren't any other arrays being defined anywhere in this // test case, besides the length-1 one containing [1337] }