| // min-llvm-version: 12.0.0 |
| // needs-llvm-components: aarch64 x86 |
| // revisions:X64 A64 |
| // assembly-output: emit-asm |
| // [X64] compile-flags: --target x86_64-unknown-linux-gnu -Crelocation-model=static |
| // [A64] compile-flags: --target aarch64-unknown-linux-gnu -Crelocation-model=static |
| |
| #![feature(no_core, lang_items)] |
| #![no_core] |
| #![crate_type="rlib"] |
| |
| #[lang="sized"] |
| trait Sized {} |
| |
| #[lang="copy"] |
| trait Copy {} |
| |
| impl Copy for u8 {} |
| |
| extern "C" { |
| fn chaenomeles(); |
| } |
| |
| // CHECK-LABEL: banana: |
| // x64: movb chaenomeles, %{{[a,z]+}} |
| // A64: adrp [[REG:[a-z0-9]+]], chaenomeles |
| // A64-NEXT: ldrb {{[a-z0-9]+}}, {{\[}}[[REG]], :lo12:chaenomeles] |
| #[no_mangle] |
| pub fn banana() -> u8 { |
| unsafe { |
| *(chaenomeles as *mut u8) |
| } |
| } |
| |
| // CHECK-LABEL: peach: |
| // x64: movb banana, %{{[a,z]+}} |
| // A64: adrp [[REG2:[a-z0-9]+]], banana |
| // A64-NEXT: ldrb {{[a-z0-9]+}}, {{\[}}[[REG2]], :lo12:banana] |
| #[no_mangle] |
| pub fn peach() -> u8 { |
| unsafe { |
| *(banana as *mut u8) |
| } |
| } |