| //@ compile-flags: -O |
| |
| //@ revisions:x86_64 i686 aarch64-apple aarch64-windows aarch64-linux arm riscv |
| |
| //@[x86_64] compile-flags: --target x86_64-unknown-uefi |
| //@[x86_64] needs-llvm-components: x86 |
| //@[i686] compile-flags: --target i686-unknown-linux-musl |
| //@[i686] needs-llvm-components: x86 |
| //@[aarch64-windows] compile-flags: --target aarch64-pc-windows-msvc |
| //@[aarch64-windows] needs-llvm-components: aarch64 |
| //@[aarch64-linux] compile-flags: --target aarch64-unknown-linux-gnu |
| //@[aarch64-linux] needs-llvm-components: aarch64 |
| //@[aarch64-apple] compile-flags: --target aarch64-apple-darwin |
| //@[aarch64-apple] needs-llvm-components: aarch64 |
| //@[arm] compile-flags: --target armv7r-none-eabi |
| //@[arm] needs-llvm-components: arm |
| //@[riscv] compile-flags: --target riscv64gc-unknown-none-elf |
| //@[riscv] needs-llvm-components: riscv |
| |
| // See bottom of file for a corresponding C source file that is meant to yield |
| // equivalent declarations. |
| #![feature(no_core, lang_items)] |
| #![crate_type = "lib"] |
| #![no_std] |
| #![no_core] |
| |
| #[lang = "sized"] |
| trait Sized {} |
| #[lang = "freeze"] |
| trait Freeze {} |
| #[lang = "copy"] |
| trait Copy {} |
| |
| #[repr(i8)] |
| pub enum Type { |
| Type1 = 0, |
| Type2 = 1, |
| } |
| |
| // To accommodate rust#97800, one might consider writing the below as: |
| // |
| // `define{{( dso_local)?}} noundef{{( signext)?}} i8 @test()` |
| // |
| // but based on rust#80556, it seems important to actually check for the |
| // presence of the `signext` for those targets where we expect it. |
| |
| // CHECK: define{{( dso_local)?}} noundef |
| // x86_64-SAME: signext |
| // aarch64-apple-SAME: signext |
| // aarch64-windows-NOT: signext |
| // aarch64-linux-NOT: signext |
| // arm-SAME: signext |
| // riscv-SAME: signext |
| // CHECK-SAME: i8 @test() |
| |
| #[no_mangle] |
| pub extern "C" fn test() -> Type { |
| Type::Type1 |
| } |