align-byval test: use revisions to test different targets
This commit is contained in:
parent
0becc89d4a
commit
102292655b
@ -1,56 +1,51 @@
|
||||
// ignore-x86
|
||||
// ignore-aarch64
|
||||
// ignore-aarch64_be
|
||||
// ignore-arm
|
||||
// ignore-armeb
|
||||
// ignore-avr
|
||||
// ignore-bpfel
|
||||
// ignore-bpfeb
|
||||
// ignore-hexagon
|
||||
// ignore-mips
|
||||
// ignore-mips64
|
||||
// ignore-msp430
|
||||
// ignore-powerpc64
|
||||
// ignore-powerpc64le
|
||||
// ignore-powerpc
|
||||
// ignore-r600
|
||||
// ignore-amdgcn
|
||||
// ignore-sparc
|
||||
// ignore-sparcv9
|
||||
// ignore-sparcel
|
||||
// ignore-s390x
|
||||
// ignore-tce
|
||||
// ignore-thumb
|
||||
// ignore-thumbeb
|
||||
// ignore-xcore
|
||||
// ignore-nvptx
|
||||
// ignore-nvptx64
|
||||
// ignore-le32
|
||||
// ignore-le64
|
||||
// ignore-amdil
|
||||
// ignore-amdil64
|
||||
// ignore-hsail
|
||||
// ignore-hsail64
|
||||
// ignore-spir
|
||||
// ignore-spir64
|
||||
// ignore-kalimba
|
||||
// ignore-shave
|
||||
//
|
||||
// revisions:m68k wasm x86_64-linux x86_64-windows
|
||||
|
||||
//[m68k] compile-flags: --target m68k-unknown-linux-gnu
|
||||
//[m68k] needs-llvm-components: m68k
|
||||
//[wasm] compile-flags: --target wasm32-unknown-emscripten
|
||||
//[wasm] needs-llvm-components: webassembly
|
||||
//[x86_64-linux] compile-flags: --target x86_64-unknown-linux-gnu
|
||||
//[x86_64-linux] needs-llvm-components: x86
|
||||
//[x86_64-windows] compile-flags: --target x86_64-pc-windows-msvc
|
||||
//[x86_64-windows] needs-llvm-components: x86
|
||||
|
||||
// Tests that `byval` alignment is properly specified (#80127).
|
||||
// The only targets that use `byval` are m68k, wasm, x86-64, and x86. Note that
|
||||
// x86 has special rules (see #103830), and it's therefore ignored here.
|
||||
// Note also that Windows mandates a by-ref ABI here, so it does not use byval.
|
||||
|
||||
#![feature(no_core, lang_items)]
|
||||
#![crate_type = "lib"]
|
||||
#![no_std]
|
||||
#![no_core]
|
||||
|
||||
#[lang="sized"] trait Sized { }
|
||||
#[lang="freeze"] trait Freeze { }
|
||||
#[lang="copy"] trait Copy { }
|
||||
|
||||
impl Copy for i32 {}
|
||||
impl Copy for i64 {}
|
||||
|
||||
#[repr(C)]
|
||||
#[repr(align(16))]
|
||||
struct Foo {
|
||||
a: [i32; 16],
|
||||
b: i8
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
// CHECK: declare void @f({{.*}}byval(%Foo) align 16{{.*}})
|
||||
// m68k: declare void @f({{.*}}byval(%Foo) align 16{{.*}})
|
||||
|
||||
// wasm: declare void @f({{.*}}byval(%Foo) align 16{{.*}})
|
||||
|
||||
// x86_64-linux: declare void @f({{.*}}byval(%Foo) align 16{{.*}})
|
||||
|
||||
// x86_64-windows: declare void @f(
|
||||
// x86_64-windows-NOT: byval
|
||||
// x86_64-windows-SAME: align 16{{.*}})
|
||||
fn f(foo: Foo);
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
unsafe { f(Foo { a: [1; 16] }) }
|
||||
unsafe { f(Foo { a: [1; 16], b: 2 }) }
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user