• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /// This should not be opaque; we can see the attributes and can pack the
2 /// struct.
3 struct AlignedToOne {
4     int i;
5 } __attribute__ ((packed,aligned(1)));
6 
7 /// This should be opaque because although we can see the attributes, Rust before
8 /// 1.33 doesn't have `#[repr(packed(N))]`.
9 struct AlignedToTwo {
10     int i;
11 } __attribute__ ((packed,aligned(2)));
12 
13 #pragma pack(1)
14 
15 /// This should not be opaque because although `libclang` doesn't give us the
16 /// `#pragma pack(1)`, we can detect that alignment is 1 and add
17 /// `#[repr(packed)]` to the struct ourselves.
18 struct PackedToOne {
19     int x;
20     int y;
21 };
22 
23 #pragma pack()
24 
25 #pragma pack(2)
26 
27 /// In this case, even if we can detect the weird alignment triggered by
28 /// `#pragma pack(2)`, we can't do anything about it because Rust before 1.33
29 /// doesn't have `#[repr(packed(N))]`. Therefore, we must make it opaque.
30 struct PackedToTwo {
31     int x;
32     int y;
33 };
34 
35 #pragma pack()
36