| //@ known-bug: #129372 | |
| //@ compile-flags: -Cdebuginfo=2 -Copt-level=0 | |
| //@ ignore-backends: gcc | |
| pub struct Wrapper<T>(T); | |
| struct Struct; | |
| pub trait TraitA { | |
| type AssocA<'t>; | |
| } | |
| pub trait TraitB { | |
| type AssocB; | |
| } | |
| pub fn helper(v: impl MethodTrait) { | |
| let _local_that_causes_ice = v.method(); | |
| } | |
| pub fn main() { | |
| helper(Wrapper(Struct)); | |
| } | |
| pub trait MethodTrait { | |
| type Assoc<'a>; | |
| fn method(self) -> impl for<'a> FnMut(&'a ()) -> Self::Assoc<'a>; | |
| } | |
| impl<T: TraitB> MethodTrait for T | |
| where | |
| <T as TraitB>::AssocB: TraitA, | |
| { | |
| type Assoc<'a> = <T::AssocB as TraitA>::AssocA<'a>; | |
| fn method(self) -> impl for<'a> FnMut(&'a ()) -> Self::Assoc<'a> { | |
| move |_| loop {} | |
| } | |
| } | |
| impl<T, B> TraitB for Wrapper<B> | |
| where | |
| B: TraitB<AssocB = T>, | |
| { | |
| type AssocB = T; | |
| } | |
| impl TraitB for Struct { | |
| type AssocB = Struct; | |
| } | |
| impl TraitA for Struct { | |
| type AssocA<'t> = Self; | |
| } |