1 | // RUN: %clang_cc1 -emit-llvm-only -triple x86_64-apple-darwin9 %s |
---|---|
2 | // rdar://8823265 |
3 | |
4 | extern void abort(void); |
5 | #define ATTR __attribute__((__ms_struct__)) |
6 | |
7 | struct |
8 | { |
9 | char foo; |
10 | long : 0; |
11 | char : 0; |
12 | int : 0; |
13 | char bar; |
14 | } ATTR t1 = {'a', 'b'}; |
15 | |
16 | struct |
17 | { |
18 | char bar0; |
19 | long : 0; |
20 | int : 0; |
21 | char bar1; |
22 | char bar2; |
23 | long : 0; |
24 | char bar3; |
25 | char bar4; |
26 | char : 0; |
27 | char bar5; |
28 | char bar6; |
29 | char : 0; |
30 | char bar7; |
31 | char bar8; |
32 | } ATTR t2 = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}; |
33 | |
34 | struct { |
35 | int : 0; |
36 | int i1; |
37 | int : 0; |
38 | int i2; |
39 | int : 0; |
40 | int i3; |
41 | int : 0; |
42 | int i4; |
43 | } t3 = {1,2,3,4}; |
44 | |
45 | int main() { |
46 | if (sizeof(t1) != 2) |
47 | abort(); |
48 | if (t1.foo != 'a') |
49 | abort(); |
50 | if (t1.bar != 'b') |
51 | abort(); |
52 | t1.foo = 'c'; |
53 | t1.bar = 'd'; |
54 | if (t1.foo != 'c') |
55 | abort(); |
56 | if (t1.bar != 'd') |
57 | abort(); |
58 | if (sizeof(t2) != 9) |
59 | abort(); |
60 | if (t2.bar0 != 'a' || t2.bar8 != 'i') |
61 | abort(); |
62 | if (sizeof(t3) != 16) |
63 | abort(); |
64 | if (t3.i1 != 1 || t3.i4 != 4) |
65 | abort(); |
66 | return 0; |
67 | } |
68 | |
69 |