Apply packed and align restrictions to unions.
This commit is contained in:
parent
200c4d0410
commit
5cccd6a9ee
3 changed files with 65 additions and 10 deletions
|
|
@ -28,14 +28,31 @@ enum D { D }
|
|||
struct E(i32);
|
||||
|
||||
#[repr(packed, align(8))]
|
||||
struct F(i32); //~ ERROR struct has conflicting packed and align representation hints
|
||||
struct F(i32); //~ ERROR type has conflicting packed and align representation hints
|
||||
|
||||
#[repr(packed)]
|
||||
#[repr(align(8))]
|
||||
struct G(i32); //~ ERROR struct has conflicting packed and align representation hints
|
||||
struct G(i32); //~ ERROR type has conflicting packed and align representation hints
|
||||
|
||||
#[repr(align(8))]
|
||||
#[repr(packed)]
|
||||
struct H(i32); //~ ERROR struct has conflicting packed and align representation hints
|
||||
struct H(i32); //~ ERROR type has conflicting packed and align representation hints
|
||||
|
||||
#[repr(packed, align(8))]
|
||||
union X { //~ ERROR type has conflicting packed and align representation hints
|
||||
i: i32
|
||||
}
|
||||
|
||||
#[repr(packed)]
|
||||
#[repr(align(8))]
|
||||
union Y { //~ ERROR type has conflicting packed and align representation hints
|
||||
i: i32
|
||||
}
|
||||
|
||||
#[repr(align(8))]
|
||||
#[repr(packed)]
|
||||
union Z { //~ ERROR type has conflicting packed and align representation hints
|
||||
i: i32
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -9,17 +9,53 @@
|
|||
// except according to those terms.
|
||||
#![feature(attr_literals)]
|
||||
#![feature(repr_align)]
|
||||
#![feature(untagged_unions)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
#[repr(align(16))]
|
||||
struct A(i32);
|
||||
struct SA(i32);
|
||||
|
||||
struct B(A);
|
||||
struct SB(SA);
|
||||
|
||||
#[repr(align(16))]
|
||||
union UA {
|
||||
i: i32
|
||||
}
|
||||
|
||||
union UB {
|
||||
a: UA
|
||||
}
|
||||
|
||||
#[repr(packed)]
|
||||
struct C(A); //~ ERROR: packed struct cannot transitively contain a `[repr(align)]` struct
|
||||
struct SC(SA); //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
|
||||
#[repr(packed)]
|
||||
struct D(B); //~ ERROR: packed struct cannot transitively contain a `[repr(align)]` struct
|
||||
struct SD(SB); //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
|
||||
#[repr(packed)]
|
||||
struct SE(UA); //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
|
||||
#[repr(packed)]
|
||||
struct SF(UB); //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
|
||||
#[repr(packed)]
|
||||
union UC { //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
a: UA
|
||||
}
|
||||
|
||||
#[repr(packed)]
|
||||
union UD { //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
n: UB
|
||||
}
|
||||
|
||||
#[repr(packed)]
|
||||
union UE { //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
a: SA
|
||||
}
|
||||
|
||||
#[repr(packed)]
|
||||
union UF { //~ ERROR: packed type cannot transitively contain a `[repr(align)]` type
|
||||
n: SB
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue