// // compile-flags:-Zprint-mono-items=eager #![deny(dead_code)] #![feature(start)] trait Trait : Sized { fn foo(self) -> Self { self } } impl Trait for u32 { fn foo(self) -> u32 { self } } impl Trait for char { } fn take_foo_once T>(f: F, arg: T) -> T { (f)(arg) } fn take_foo T>(f: F, arg: T) -> T { (f)(arg) } fn take_foo_mut T>(mut f: F, arg: T) -> T { (f)(arg) } //~ MONO_ITEM fn start #[start] fn start(_: isize, _: *const *const u8) -> isize { //~ MONO_ITEM fn take_foo_once:: u32 {::foo}> //~ MONO_ITEM fn ::foo //~ MONO_ITEM fn u32 {::foo} as std::ops::FnOnce<(u32,)>>::call_once - shim(fn(u32) -> u32 {::foo}) take_foo_once(Trait::foo, 0u32); //~ MONO_ITEM fn take_foo_once:: char {::foo}> //~ MONO_ITEM fn ::foo //~ MONO_ITEM fn char {::foo} as std::ops::FnOnce<(char,)>>::call_once - shim(fn(char) -> char {::foo}) take_foo_once(Trait::foo, 'c'); //~ MONO_ITEM fn take_foo:: u32 {::foo}> //~ MONO_ITEM fn u32 {::foo} as std::ops::Fn<(u32,)>>::call - shim(fn(u32) -> u32 {::foo}) take_foo(Trait::foo, 0u32); //~ MONO_ITEM fn take_foo:: char {::foo}> //~ MONO_ITEM fn char {::foo} as std::ops::Fn<(char,)>>::call - shim(fn(char) -> char {::foo}) take_foo(Trait::foo, 'c'); //~ MONO_ITEM fn take_foo_mut:: u32 {::foo}> //~ MONO_ITEM fn u32 {::foo} as std::ops::FnMut<(u32,)>>::call_mut - shim(fn(u32) -> u32 {::foo}) take_foo_mut(Trait::foo, 0u32); //~ MONO_ITEM fn take_foo_mut:: char {::foo}> //~ MONO_ITEM fn char {::foo} as std::ops::FnMut<(char,)>>::call_mut - shim(fn(char) -> char {::foo}) take_foo_mut(Trait::foo, 'c'); 0 }