1 // RUN: clang-cc -triple i386-unknown-unknown %s -emit-llvm -o -
2 
3 struct  {
4   int x;
5   int y;
6 } point;
7 
8 void fn1() {
9   point.x = 42;
10 }
11 
12 /* Nested member */
13 struct  {
14   struct {
15     int a;
16     int b;
17   } p1;
18 } point2;
19 
20 void fn2() {
21   point2.p1.a = 42;
22 }
23 
24 /* Indirect reference */
25 typedef struct __sf {
26  unsigned char *c;
27  short flags;
28 } F;
29 
30 typedef struct __sf2 {
31   F *ff;
32 } F2;
33 
34 int fn3(F2 *c) {
35   if (c->ff->c >= 0)
36     return 1;
37   else
38     return 0;
39 }
40 
41 /* Nested structs */
42 typedef struct NA {
43   int data;
44   struct NA *next;
45 } NA;
46 void f1() {  NA a; }
47 
48 typedef struct NB {
49   int d1;
50   struct _B2 {
51     int d2;
52     struct NB *n2;
53   } B2;
54 } NB;
55 
56 void f2() { NB b; }
57 
58 extern NB *f3();
59 void f4() {
60   f3()->d1 = 42;
61 }
62 
63 void f5() {
64   (f3())->d1 = 42;
65 }
66 
67 /* Function calls */
68 typedef struct {
69   int location;
70   int length;
71 } range;
72 extern range f6();
73 void f7()
74 {
75   range r = f6();
76 }
77 
78 /* Member expressions */
79 typedef struct {
80   range range1;
81   range range2;
82 } rangepair;
83 
84 void f8()
85 {
86   rangepair p;
87 
88   range r = p.range1;
89 }
90 
91 void f9(range *p)
92 {
93   range r = *p;
94 }
95 
96 void f10(range *p)
97 {
98   range r = p[0];
99 }
100 
101 /* _Bool types */
102 
103 struct _w
104 {
105   short a,b;
106   short c,d;
107   short e,f;
108   short g;
109 
110   unsigned int h,i;
111 
112   _Bool j,k;
113 } ws;
114 
115 /* Implicit casts (due to typedefs) */
116 typedef struct _a
117 {
118   int a;
119 } a;
120 
121 void f11()
122 {
123     struct _a a1;
124     a a2;
125 
126     a1 = a2;
127     a2 = a1;
128 }
129 
130 /* Implicit casts (due to const) */
131 void f12()
132 {
133 	struct _a a1;
134 	const struct _a a2;
135 
136 	a1 = a2;
137 }
138 
139 /* struct initialization */
140 struct a13 {int b; int c;};
141 struct a13 c13 = {5};
142 typedef struct a13 a13;
143 struct a14 { short a; int b; } x = {1, 1};
144 
145 /* flexible array members */
146 struct a15 {char a; int b[];} c15;
147 int a16(void) {c15.a = 1;}
148 
149 /* compound literals */
150 void f13()
151 {
152   a13 x; x = (a13){1,2};
153 }
154 
155 /* va_arg */
156 int f14(int i, ...) {
157   __builtin_va_list l;
158   __builtin_va_start(l,i);
159   a13 b = __builtin_va_arg(l, a13);
160   int c = __builtin_va_arg(l, a13).c;
161   return b.b;
162 }
163 
164 /* Attribute packed */
165 struct __attribute__((packed)) S2839 { double a[19];  signed char b; } s2839[5];
166 
167 struct __attribute__((packed)) SS { long double a; char b; } SS;
168 
169 
170 /* As lvalue */
171 
172 int f15() {
173   extern range f15_ext();
174   return f15_ext().location;
175 }
176 
177 range f16() {
178   extern rangepair f16_ext();
179   return f16_ext().range1;
180 }
181 
182 int f17() {
183   extern range f17_ext();
184   range r;
185   return (r = f17_ext()).location;
186 }
187 
188 range f18() {
189   extern rangepair f18_ext();
190   rangepair rp;
191   return (rp = f18_ext()).range1;
192 }
193