blob: 824e6fbfc4dd0c3b2f99ff0e01ea8313c8253f61 [file] [edit]
//@ 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;
}