mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-27 18:56:24 +00:00
53 lines
1.1 KiB
Rust
53 lines
1.1 KiB
Rust
// 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<Assoc = A>;
|
|
|
|
trait Super {
|
|
type Assoc;
|
|
}
|
|
impl Super for Foo {
|
|
type Assoc = A;
|
|
}
|
|
|
|
trait IsDynSomething {}
|
|
impl IsDynSomething for DynSomething {}
|
|
|
|
impl<T: ?Sized> 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]
|
|
}
|