| //@ compile-flags: -C no-prepopulate-passes -Copt-level=0 -Zmin-function-alignment=16 | |
| //@ needs-asm-support | |
| //@ needs-asm-ret | |
| //@ ignore-wasm32 aligning functions is not currently supported on wasm (#143368) | |
| // FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres ambiguity | |
| #![feature(rustc_attrs)] | |
| #![feature(fn_align)] | |
| #![crate_type = "lib"] | |
| // functions without explicit alignment use the global minimum | |
| // | |
| // CHECK: .balign 16 | |
| #[no_mangle] | |
| #[unsafe(naked)] | |
| pub extern "C" fn naked_no_explicit_align() { | |
| core::arch::naked_asm!("ret") | |
| } | |
| // CHECK: .balign 16 | |
| #[no_mangle] | |
| #[rustc_align(8)] | |
| #[unsafe(naked)] | |
| pub extern "C" fn naked_lower_align() { | |
| core::arch::naked_asm!("ret") | |
| } | |
| // CHECK: .balign 32 | |
| #[no_mangle] | |
| #[rustc_align(32)] | |
| #[unsafe(naked)] | |
| pub extern "C" fn naked_higher_align() { | |
| core::arch::naked_asm!("ret") | |
| } | |
| // cold functions follow the same rules as other functions | |
| // | |
| // in GCC, the `-falign-functions` does not apply to cold functions, but | |
| // `-Zmin-function-alignment` applies to all functions. | |
| // | |
| // CHECK: .balign 16 | |
| #[no_mangle] | |
| #[cold] | |
| #[unsafe(naked)] | |
| pub extern "C" fn no_explicit_align_cold() { | |
| core::arch::naked_asm!("ret") | |
| } |