//@ run-pass //@ revisions: mir codegen //@[mir] compile-flags: -Zmir-opt-level=3 //@[codegen] compile-flags: -Zmir-opt-level=0 // A regression test for #107205 #![allow(coherence_leak_check)] struct Foo(T); fn useful<'a>(_: &'a u8) {} trait GetInner { type Assoc; fn muahaha(&mut self) -> Self::Assoc; } impl GetInner for Foo { type Assoc = String; fn muahaha(&mut self) -> String { String::from("I am a string") } } impl GetInner for Foo fn(&'a u8)> { type Assoc = [usize; 3]; fn muahaha(&mut self) -> [usize; 3] { [100; 3] } } fn break_me(hr_fnptr: Box fn(&'a u8)>>) -> Box> { let lr_fnptr = hr_fnptr as Box>; lr_fnptr as Box> } fn main() { drop(Box::new(Foo(useful as fn(&'static u8))) as Box>); drop(Box::new(Foo(useful as fn(&u8))) as Box>); let mut any = break_me(Box::new(Foo(useful))); let evil_string = any.muahaha(); assert_eq!(evil_string, "I am a string"); }