| // This test checks that global variables respect the target minimum alignment. |
| // The three bools `STATIC_BOOL`, `STATIC_MUT_BOOL`, and `CONST_BOOL` all have |
| // type-alignment of 1, but some targets require greater global alignment. |
| // See https://github.com/rust-lang/rust/pull/44440 |
| |
| //@ only-linux |
| // Reason: this test is specific to linux, considering compilation is targeted |
| // towards linux architectures only. |
| |
| use run_make_support::{assert_count_is, llvm_components_contain, rfs, rustc}; |
| |
| fn main() { |
| // Most targets are happy with default alignment -- take i686 for example. |
| if llvm_components_contain("x86") { |
| rustc().target("i686-unknown-linux-gnu").emit("llvm-ir").input("min_global_align.rs").run(); |
| assert_count_is(3, rfs::read_to_string("min_global_align.ll"), "align 1"); |
| } |
| // SystemZ requires even alignment for PC-relative addressing. |
| if llvm_components_contain("systemz") { |
| rustc() |
| .target("s390x-unknown-linux-gnu") |
| .emit("llvm-ir") |
| .input("min_global_align.rs") |
| .run(); |
| assert_count_is(3, rfs::read_to_string("min_global_align.ll"), "align 2"); |
| } |
| } |