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