]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Sema/struct-packed-align.c
Update clang to r100181.
[FreeBSD/FreeBSD.git] / test / Sema / struct-packed-align.c
1 // RUN: %clang_cc1 %s -fsyntax-only -verify
2
3 // Packed structs.
4 struct s {
5     char a;
6     int b  __attribute__((packed));
7     char c;
8     int d;
9 };
10
11 extern int a1[sizeof(struct s) == 12 ? 1 : -1];
12 extern int a2[__alignof(struct s) == 4 ? 1 : -1];
13
14 struct __attribute__((packed)) packed_s {
15     char a;
16     int b  __attribute__((packed));
17     char c;
18     int d;
19 };
20
21 extern int b1[sizeof(struct packed_s) == 10 ? 1 : -1];
22 extern int b2[__alignof(struct packed_s) == 1 ? 1 : -1];
23
24 struct fas {
25     char a;
26     int b[];
27 };
28
29 extern int c1[sizeof(struct fas) == 4 ? 1 : -1];
30 extern int c2[__alignof(struct fas) == 4 ? 1 : -1];
31
32 struct __attribute__((packed)) packed_fas {
33     char a;
34     int b[];
35 };
36
37 extern int d1[sizeof(struct packed_fas) == 1 ? 1 : -1];
38 extern int d2[__alignof(struct packed_fas) == 1 ? 1 : -1];
39
40 struct packed_after_fas {
41     char a;
42     int b[];
43 } __attribute__((packed));
44
45 extern int d1_2[sizeof(struct packed_after_fas) == 1 ? 1 : -1];
46 extern int d2_2[__alignof(struct packed_after_fas) == 1 ? 1 : -1];
47
48 // Alignment
49
50 struct __attribute__((aligned(8))) as1 {
51     char c;
52 };
53
54 extern int e1[sizeof(struct as1) == 8 ? 1 : -1];
55 extern int e2[__alignof(struct as1) == 8 ? 1 : -1];
56
57 // FIXME: Will need to force arch once max usable alignment isn't hard
58 // coded.
59 struct __attribute__((aligned)) as1_2 {
60     char c;
61 };
62 extern int e1_2[sizeof(struct as1_2) == 16 ? 1 : -1];
63 extern int e2_2[__alignof(struct as1_2) == 16 ? 1 : -1];
64
65 struct as2 {
66     char c;
67     int __attribute__((aligned(8))) a;
68 };
69
70 extern int f1[sizeof(struct as2) == 16 ? 1 : -1];
71 extern int f2[__alignof(struct as2) == 8 ? 1 : -1];
72
73 struct __attribute__((packed)) as3 {
74     char c;
75     int a;
76     int __attribute__((aligned(8))) b;
77 };
78
79 extern int g1[sizeof(struct as3) == 16 ? 1 : -1];
80 extern int g2[__alignof(struct as3) == 8 ? 1 : -1];
81
82
83 // rdar://5921025
84 struct packedtest {
85   int ted_likes_cheese;
86   void *args[] __attribute__((packed));
87 };
88
89 // Packed union
90 union __attribute__((packed)) au4 {char c; int x;};
91 extern int h1[sizeof(union au4) == 4 ? 1 : -1];
92 extern int h2[__alignof(union au4) == 1 ? 1 : -1];
93
94 // Aligned union
95 union au5 {__attribute__((aligned(4))) char c;};
96 extern int h1[sizeof(union au5) == 4 ? 1 : -1];
97 extern int h2[__alignof(union au5) == 4 ? 1 : -1];
98
99 // Alignment+packed
100 struct as6 {char c; __attribute__((packed, aligned(2))) int x;};
101 extern int i1[sizeof(struct as6) == 6 ? 1 : -1];
102 extern int i2[__alignof(struct as6) == 2 ? 1 : -1];
103
104 union au6 {char c; __attribute__((packed, aligned(2))) int x;};
105 extern int k1[sizeof(union au6) == 4 ? 1 : -1];
106 extern int k2[__alignof(union au6) == 2 ? 1 : -1];
107
108 // Check postfix attributes
109 union au7 {char c; int x;} __attribute__((packed));
110 extern int l1[sizeof(union au7) == 4 ? 1 : -1];
111 extern int l2[__alignof(union au7) == 1 ? 1 : -1];
112
113 struct packed_fas2 {
114     char a;
115     int b[];
116 } __attribute__((packed));
117
118 extern int m1[sizeof(struct packed_fas2) == 1 ? 1 : -1];
119 extern int m2[__alignof(struct packed_fas2) == 1 ? 1 : -1];