// The indirect call will generate a shim that then calls the actual function. Test that // this is handled correctly. See also https://github.com/rust-lang/rust/issues/143266. //@ build-pass //@ add-core-stubs //@ revisions: aarch64 x86_64 //@ [aarch64] compile-flags: --target aarch64-unknown-none //@ [aarch64] needs-llvm-components: aarch64 //@ [x86_64] compile-flags: --target x86_64-unknown-none //@ [x86_64] needs-llvm-components: x86 #![feature(no_core, lang_items)] #![crate_type = "lib"] #![no_core] extern crate minicore; use minicore::*; trait MyTrait { #[unsafe(naked)] extern "C" fn foo(&self) { naked_asm!("ret") } } impl MyTrait for i32 {} fn main() { let x: extern "C" fn(&_) = ::foo; x(&1); }