diff options
Diffstat (limited to 'tests/codegen-llvm/naked-fn/min-function-alignment.rs')
| -rw-r--r-- | tests/codegen-llvm/naked-fn/min-function-alignment.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/codegen-llvm/naked-fn/min-function-alignment.rs b/tests/codegen-llvm/naked-fn/min-function-alignment.rs new file mode 100644 index 00000000000..406e9334fa5 --- /dev/null +++ b/tests/codegen-llvm/naked-fn/min-function-alignment.rs @@ -0,0 +1,47 @@ +//@ compile-flags: -C no-prepopulate-passes -Copt-level=0 -Zmin-function-alignment=16 +//@ needs-asm-support +//@ ignore-arm no "ret" mnemonic +//@ 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") +} |
