blob: e1739314d7fccd86d80a595efffe7299996ac837 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o -
Devang Patelb9b00ad2007-10-23 20:28:39 +00002
3struct {
4 int x;
5 int y;
6} point;
7
8void fn1() {
9 point.x = 42;
10}
11
12/* Nested member */
13struct {
14 struct {
15 int a;
16 int b;
17 } p1;
18} point2;
19
20void fn2() {
21 point2.p1.a = 42;
22}
23
24/* Indirect reference */
25typedef struct __sf {
26 unsigned char *c;
27 short flags;
28} F;
29
30typedef struct __sf2 {
31 F *ff;
32} F2;
33
34int fn3(F2 *c) {
35 if (c->ff->c >= 0)
36 return 1;
37 else
38 return 0;
39}
Devang Patelb1e39892007-10-23 23:26:46 +000040
41/* Nested structs */
42typedef struct NA {
43 int data;
44 struct NA *next;
45} NA;
Devang Pateldbb46b12007-10-23 23:29:51 +000046void f1() { NA a; }
Devang Patelb1e39892007-10-23 23:26:46 +000047
48typedef struct NB {
49 int d1;
50 struct _B2 {
51 int d2;
52 struct NB *n2;
53 } B2;
54} NB;
55
56void f2() { NB b; }
57
Devang Patel126a8562007-10-24 22:26:28 +000058extern NB *f3();
59void f4() {
60 f3()->d1 = 42;
61}
Devang Patel0a961182007-10-26 18:15:21 +000062
63void f5() {
64 (f3())->d1 = 42;
65}
Anders Carlsson148fe672007-10-31 22:04:46 +000066
67/* Function calls */
68typedef struct {
69 int location;
70 int length;
71} range;
Anders Carlsson148fe672007-10-31 22:04:46 +000072extern range f6();
Mike Stump1eb44332009-09-09 15:08:12 +000073void f7() {
Anders Carlssona1ff3e92007-11-02 16:59:10 +000074 range r = f6();
75}
76
77/* Member expressions */
78typedef struct {
79 range range1;
80 range range2;
81} rangepair;
82
Mike Stump1eb44332009-09-09 15:08:12 +000083void f8() {
Anders Carlssona1ff3e92007-11-02 16:59:10 +000084 rangepair p;
85
86 range r = p.range1;
Anders Carlsson148fe672007-10-31 22:04:46 +000087}
88
Mike Stump1eb44332009-09-09 15:08:12 +000089void f9(range *p) {
Seo Sanghyeon7777bb22007-12-14 01:09:11 +000090 range r = *p;
91}
Anders Carlsson148fe672007-10-31 22:04:46 +000092
Mike Stump1eb44332009-09-09 15:08:12 +000093void f10(range *p) {
Seo Sanghyeon9b73b392007-12-14 02:04:12 +000094 range r = p[0];
95}
96
Devang Patel14c75002007-12-10 18:25:34 +000097/* _Bool types */
98
Mike Stump1eb44332009-09-09 15:08:12 +000099struct _w {
Devang Patel14c75002007-12-10 18:25:34 +0000100 short a,b;
101 short c,d;
102 short e,f;
103 short g;
104
105 unsigned int h,i;
106
107 _Bool j,k;
108} ws;
Anders Carlssone4707ff2008-01-14 06:28:57 +0000109
110/* Implicit casts (due to typedefs) */
Mike Stump1eb44332009-09-09 15:08:12 +0000111typedef struct _a {
Anders Carlssone4707ff2008-01-14 06:28:57 +0000112 int a;
113} a;
114
Mike Stump1eb44332009-09-09 15:08:12 +0000115void f11() {
116 struct _a a1;
117 a a2;
Anders Carlssone4707ff2008-01-14 06:28:57 +0000118
Mike Stump1eb44332009-09-09 15:08:12 +0000119 a1 = a2;
120 a2 = a1;
Anders Carlssone4707ff2008-01-14 06:28:57 +0000121}
Anders Carlssona46b7592008-01-18 02:25:57 +0000122
123/* Implicit casts (due to const) */
Mike Stump1eb44332009-09-09 15:08:12 +0000124void f12() {
125 struct _a a1;
126 const struct _a a2;
127
128 a1 = a2;
Devang Patel47fb6972008-01-29 23:23:18 +0000129}
130
131/* struct initialization */
Eli Friedman75afb582008-02-06 05:33:51 +0000132struct a13 {int b; int c;};
Devang Patel47fb6972008-01-29 23:23:18 +0000133struct a13 c13 = {5};
Devang Patelbf20b682008-05-27 22:44:22 +0000134typedef struct a13 a13;
Devang Pateleae15602008-02-05 02:39:50 +0000135struct a14 { short a; int b; } x = {1, 1};
Eli Friedman75afb582008-02-06 05:33:51 +0000136
137/* flexible array members */
138struct a15 {char a; int b[];} c15;
139int a16(void) {c15.a = 1;}
Eli Friedmanb1851242008-05-27 15:51:49 +0000140
141/* compound literals */
Mike Stump1eb44332009-09-09 15:08:12 +0000142void f13() {
Eli Friedmanb1851242008-05-27 15:51:49 +0000143 a13 x; x = (a13){1,2};
144}
145
146/* va_arg */
147int f14(int i, ...) {
148 __builtin_va_list l;
149 __builtin_va_start(l,i);
150 a13 b = __builtin_va_arg(l, a13);
Daniel Dunbar4dc346e2009-02-12 08:41:10 +0000151 int c = __builtin_va_arg(l, a13).c;
Eli Friedmanb1851242008-05-27 15:51:49 +0000152 return b.b;
153}
Devang Patel2fb86e62008-05-27 22:45:40 +0000154
155/* Attribute packed */
156struct __attribute__((packed)) S2839 { double a[19]; signed char b; } s2839[5];
Eli Friedman0408f682008-05-29 10:58:49 +0000157
158struct __attribute__((packed)) SS { long double a; char b; } SS;
159
Daniel Dunbar80e62c22008-09-04 03:20:13 +0000160
161/* As lvalue */
162
163int f15() {
164 extern range f15_ext();
165 return f15_ext().location;
166}
167
168range f16() {
169 extern rangepair f16_ext();
170 return f16_ext().range1;
171}
172
173int f17() {
174 extern range f17_ext();
175 range r;
176 return (r = f17_ext()).location;
177}
178
179range f18() {
180 extern rangepair f18_ext();
181 rangepair rp;
182 return (rp = f18_ext()).range1;
183}
Chris Lattnerf0a86792011-07-10 03:47:27 +0000184
185
186
187// Complex forward reference of struct.
188struct f19S;
189extern struct f19T {
190 struct f19S (*p)(void);
191} t;
192struct f19S { int i; };
193void f19(void) {
194 t.p();
195}
196