// Test that structs aligned to 128 bits are passed with the correct ABI on powerpc64le.
// This is similar to aarch64-struct-align-128.rs, but for ppc.

//@ compile-flags: --target powerpc64le-unknown-linux-gnu
//@ needs-llvm-components: powerpc

#![feature(no_core, lang_items)]
#![crate_type = "lib"]
#![no_core]

#[lang = "sized"]
trait Sized {}
#[lang = "freeze"]
trait Freeze {}
#[lang = "copy"]
trait Copy {}

#[repr(C)]
pub struct Align8 {
    pub a: u64,
    pub b: u64,
}

#[repr(transparent)]
pub struct Transparent8 {
    a: Align8,
}

#[repr(C)]
pub struct Wrapped8 {
    a: Align8,
}

extern "C" {
    // CHECK: declare void @test_8([2 x i64], [2 x i64], [2 x i64])
    fn test_8(a: Align8, b: Transparent8, c: Wrapped8);
}

#[repr(C)]
#[repr(align(16))]
pub struct Align16 {
    pub a: u64,
    pub b: u64,
}

#[repr(transparent)]
pub struct Transparent16 {
    a: Align16,
}

#[repr(C)]
pub struct Wrapped16 {
    pub a: Align16,
}

extern "C" {
    // It's important that this produces [1 x i128]  rather than just i128!
    // CHECK: declare void @test_16([1 x i128], [1 x i128], [1 x i128])
    fn test_16(a: Align16, b: Transparent16, c: Wrapped16);
}

#[repr(C)]
#[repr(align(32))]
pub struct Align32 {
    pub a: u64,
    pub b: u64,
    pub c: u64,
}

#[repr(transparent)]
pub struct Transparent32 {
    a: Align32,
}

#[repr(C)]
pub struct Wrapped32 {
    pub a: Align32,
}

extern "C" {
    // CHECK: declare void @test_32([2 x i128], [2 x i128], [2 x i128])
    fn test_32(a: Align32, b: Transparent32, c: Wrapped32);
}

pub unsafe fn main(
    a1: Align8,
    a2: Transparent8,
    a3: Wrapped8,
    b1: Align16,
    b2: Transparent16,
    b3: Wrapped16,
    c1: Align32,
    c2: Transparent32,
    c3: Wrapped32,
) {
    test_8(a1, a2, a3);
    test_16(b1, b2, b3);
    test_32(c1, c2, c3);
}
