Fix EFIABI test

Use revisions to run the EFIABI in multiple configurations, compiling
for each supported UEFI platform, and checking the ABI generated in the
LLVM IR is correct.

Use no_core to make it easier to test.
This commit is contained in:
roblabla 2019-10-25 14:44:21 +00:00
parent 093ec70b1e
commit 61732804e2

View file

@ -1,20 +1,29 @@
// Checks if the correct annotation for the efiapi ABI is passed to llvm.
// revisions:x86_64 i686 aarch64 arm riscv
//[x86_64] compile-flags: --target x86_64-unknown-uefi
//[i686] compile-flags: --target i686-unknown-linux-musl
//[aarch64] compile-flags: --target aarch64-unknown-none
//[arm] compile-flags: --target armv7r-none-eabi
//[riscv] compile-flags: --target riscv64gc-unknown-none-elf
// compile-flags: -C no-prepopulate-passes
#![crate_type = "lib"]
#![feature(abi_efiapi)]
#![feature(no_core, lang_items, abi_efiapi)]
#![no_core]
// CHECK: define win64 i64 @has_efiapi
#[no_mangle]
#[cfg(target_arch = "x86_64")]
pub extern "efiapi" fn has_efiapi(a: i64) -> i64 {
a * 2
}
#[lang="sized"]
trait Sized { }
#[lang="freeze"]
trait Freeze { }
#[lang="copy"]
trait Copy { }
// CHECK: define c i64 @has_efiapi
//x86_64: define win64cc void @has_efiapi
//i686: define void @has_efiapi
//aarch64: define void @has_efiapi
//arm: define void @has_efiapi
//riscv: define void @has_efiapi
#[no_mangle]
#[cfg(not(target_arch = "x86_64"))]
pub extern "efiapi" fn has_efiapi(a: i64) -> i64 {
a * 2
}
pub extern "efiapi" fn has_efiapi() {}