xref: /aosp_15_r20/external/clang/test/CodeGen/ms_struct-bitfield-2.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm-only  -triple x86_64-apple-darwin9 %s
2*67e74705SXin Li // rdar://8823265
3*67e74705SXin Li 
4*67e74705SXin Li #define ATTR __attribute__((__ms_struct__))
5*67e74705SXin Li 
6*67e74705SXin Li #define size_struct_0 1
7*67e74705SXin Li #define size_struct_1 4
8*67e74705SXin Li #define size_struct_2 24
9*67e74705SXin Li #define size_struct_3 8
10*67e74705SXin Li #define size_struct_4 32
11*67e74705SXin Li #define size_struct_5 12
12*67e74705SXin Li #define size_struct_6 40
13*67e74705SXin Li #define size_struct_7 8
14*67e74705SXin Li #define size_struct_8 20
15*67e74705SXin Li #define size_struct_9 32
16*67e74705SXin Li 
17*67e74705SXin Li struct _struct_0
18*67e74705SXin Li {
19*67e74705SXin Li   char member_0;
20*67e74705SXin Li } ATTR;
21*67e74705SXin Li typedef struct _struct_0 struct_0;
22*67e74705SXin Li 
23*67e74705SXin Li struct _struct_1
24*67e74705SXin Li {
25*67e74705SXin Li   char member_0;
26*67e74705SXin Li   short member_1:13;
27*67e74705SXin Li } ATTR;
28*67e74705SXin Li typedef struct _struct_1 struct_1;
29*67e74705SXin Li 
30*67e74705SXin Li struct _struct_2
31*67e74705SXin Li {
32*67e74705SXin Li   double member_0;
33*67e74705SXin Li   unsigned char member_1:8;
34*67e74705SXin Li   int member_2:32;
35*67e74705SXin Li   unsigned char member_3:5;
36*67e74705SXin Li   short member_4:14;
37*67e74705SXin Li   short member_5:13;
38*67e74705SXin Li   unsigned char:0;
39*67e74705SXin Li } ATTR;
40*67e74705SXin Li typedef struct _struct_2 struct_2;
41*67e74705SXin Li 
42*67e74705SXin Li struct _struct_3
43*67e74705SXin Li {
44*67e74705SXin Li   unsigned int member_0:26;
45*67e74705SXin Li   unsigned char member_1:2;
46*67e74705SXin Li 
47*67e74705SXin Li } ATTR;
48*67e74705SXin Li typedef struct _struct_3 struct_3;
49*67e74705SXin Li 
50*67e74705SXin Li struct _struct_4
51*67e74705SXin Li {
52*67e74705SXin Li   unsigned char member_0:7;
53*67e74705SXin Li   double member_1;
54*67e74705SXin Li   double member_2;
55*67e74705SXin Li   short member_3:5;
56*67e74705SXin Li   char member_4:2;
57*67e74705SXin Li 
58*67e74705SXin Li } ATTR;
59*67e74705SXin Li typedef struct _struct_4 struct_4;
60*67e74705SXin Li 
61*67e74705SXin Li struct _struct_5
62*67e74705SXin Li {
63*67e74705SXin Li   unsigned short member_0:12;
64*67e74705SXin Li   int member_1:1;
65*67e74705SXin Li   unsigned short member_2:6;
66*67e74705SXin Li 
67*67e74705SXin Li } ATTR;
68*67e74705SXin Li typedef struct _struct_5 struct_5;
69*67e74705SXin Li 
70*67e74705SXin Li struct _struct_6
71*67e74705SXin Li {
72*67e74705SXin Li   unsigned char member_0:7;
73*67e74705SXin Li   unsigned int member_1:25;
74*67e74705SXin Li   char member_2:1;
75*67e74705SXin Li   double member_3;
76*67e74705SXin Li   short member_4:9;
77*67e74705SXin Li   double member_5;
78*67e74705SXin Li 
79*67e74705SXin Li } ATTR;
80*67e74705SXin Li typedef struct _struct_6 struct_6;
81*67e74705SXin Li 
82*67e74705SXin Li struct _struct_7
83*67e74705SXin Li {
84*67e74705SXin Li   double member_0;
85*67e74705SXin Li 
86*67e74705SXin Li } ATTR;
87*67e74705SXin Li typedef struct _struct_7 struct_7;
88*67e74705SXin Li 
89*67e74705SXin Li struct _struct_8
90*67e74705SXin Li {
91*67e74705SXin Li   unsigned char member_0:7;
92*67e74705SXin Li   int member_1:11;
93*67e74705SXin Li   int member_2:5;
94*67e74705SXin Li   int:0;
95*67e74705SXin Li   char member_4:8;
96*67e74705SXin Li   unsigned short member_5:4;
97*67e74705SXin Li   unsigned char member_6:3;
98*67e74705SXin Li   int member_7:23;
99*67e74705SXin Li 
100*67e74705SXin Li } ATTR;
101*67e74705SXin Li typedef struct _struct_8 struct_8;
102*67e74705SXin Li 
103*67e74705SXin Li struct _struct_9
104*67e74705SXin Li {
105*67e74705SXin Li   double member_0;
106*67e74705SXin Li   unsigned int member_1:6;
107*67e74705SXin Li   int member_2:17;
108*67e74705SXin Li   double member_3;
109*67e74705SXin Li   unsigned int member_4:22;
110*67e74705SXin Li 
111*67e74705SXin Li } ATTR;
112*67e74705SXin Li typedef struct _struct_9 struct_9;
113*67e74705SXin Li 
114*67e74705SXin Li struct_0 test_struct_0 = { 123 };
115*67e74705SXin Li struct_1 test_struct_1 = { 82, 1081 };
116*67e74705SXin Li struct_2 test_struct_2 = { 20.0, 31, 407760, 1, 14916, 6712 };
117*67e74705SXin Li struct_3 test_struct_3 = { 64616999, 1 };
118*67e74705SXin Li struct_4 test_struct_4 = { 61, 20.0, 20.0, 12, 0 };
119*67e74705SXin Li struct_5 test_struct_5 = { 909, 1, 57 };
120*67e74705SXin Li struct_6 test_struct_6 = { 12, 21355796, 0, 20.0, 467, 20.0 };
121*67e74705SXin Li struct_7 test_struct_7 = { 20.0 };
122*67e74705SXin Li struct_8 test_struct_8 = { 126, 1821, 22, 125, 6, 0, 2432638 };
123*67e74705SXin Li struct_9 test_struct_9 = { 20.0, 3, 23957, 20.0, 1001631 };
124*67e74705SXin Li 
125*67e74705SXin Li 
126*67e74705SXin Li static int a0[(sizeof (struct_0) == size_struct_0) -1];
127*67e74705SXin Li static int a1[(sizeof (struct_1) == size_struct_1) -1];
128*67e74705SXin Li static int a2[(sizeof (struct_2) == size_struct_2) -1];
129*67e74705SXin Li static int a3[(sizeof (struct_3) == size_struct_3) -1];
130*67e74705SXin Li static int a4[(sizeof (struct_4) == size_struct_4) -1];
131*67e74705SXin Li static int a5[(sizeof (struct_5) == size_struct_5) -1];
132*67e74705SXin Li static int a6[(sizeof (struct_6) == size_struct_6) -1];
133*67e74705SXin Li static int a7[(sizeof (struct_7) == size_struct_7) -1];
134*67e74705SXin Li static int a8[(sizeof (struct_8) == size_struct_8) -1];
135*67e74705SXin Li static int a9[(sizeof (struct_9) == size_struct_9) -1];
136