// Test for -Z small_data_threshold=... //@ revisions: RISCV MIPS HEXAGON M68K //@ assembly-output: emit-asm //@ compile-flags: -Z small_data_threshold=4 //@ [RISCV] compile-flags: --target=riscv32im-unknown-none-elf //@ [RISCV] needs-llvm-components: riscv //@ [MIPS] compile-flags: --target=mips-unknown-linux-uclibc -C relocation-model=static //@ [MIPS] compile-flags: -C llvm-args=-mgpopt -C llvm-args=-mlocal-sdata //@ [MIPS] compile-flags: -C target-feature=+noabicalls //@ [MIPS] needs-llvm-components: mips //@ [HEXAGON] compile-flags: --target=hexagon-unknown-linux-musl -C target-feature=+small-data //@ [HEXAGON] compile-flags: -C llvm-args=--hexagon-statics-in-small-data //@ [HEXAGON] needs-llvm-components: hexagon //@ [M68K] compile-flags: --target=m68k-unknown-linux-gnu //@ [M68K] needs-llvm-components: m68k #![feature(no_core, lang_items)] #![no_std] #![no_core] #![crate_type = "lib"] #[lang = "sized"] trait Sized {} #[lang = "drop_in_place"] fn drop_in_place(_: *mut T) {} #[used] #[no_mangle] // U is below the threshold, should be in sdata static mut U: u16 = 123; #[used] #[no_mangle] // V is below the threshold, should be in sbss static mut V: u16 = 0; #[used] #[no_mangle] // W is at the threshold, should be in sdata static mut W: u32 = 123; #[used] #[no_mangle] // X is at the threshold, should be in sbss static mut X: u32 = 0; #[used] #[no_mangle] // Y is over the threshold, should be in its own .data section static mut Y: u64 = 123; #[used] #[no_mangle] // Z is over the threshold, should be in its own .bss section static mut Z: u64 = 0; // Currently, only MIPS and RISCV successfully put any objects in the small data // sections so the U/V/W/X tests are skipped on Hexagon and M68K //@ RISCV: .section .sdata //@ RISCV-NOT: .section //@ RISCV: U: //@ RISCV: .section .sbss //@ RISCV-NOT: .section //@ RISCV: V: //@ RISCV: .section .sdata //@ RISCV-NOT: .section //@ RISCV: W: //@ RISCV: .section .sbss //@ RISCV-NOT: .section //@ RISCV: X: //@ MIPS: .section .sdata //@ MIPS-NOT: .section //@ MIPS: U: //@ MIPS: .section .sbss //@ MIPS-NOT: .section //@ MIPS: V: //@ MIPS: .section .sdata //@ MIPS-NOT: .section //@ MIPS: W: //@ MIPS: .section .sbss //@ MIPS-NOT: .section //@ MIPS: X: //@ CHECK: .section .data.Y, //@ CHECK-NOT: .section //@ CHECK: Y: //@ CHECK: .section .bss.Z, //@ CHECK-NOT: .section //@ CHECK: Z: