1// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - 2 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} 40 41/* Nested structs */ 42typedef struct NA { 43 int data; 44 struct NA *next; 45} NA; 46void f1() { NA a; } 47 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 58extern NB *f3(); 59void f4() { 60 f3()->d1 = 42; 61} 62 63void f5() { 64 (f3())->d1 = 42; 65} 66 67/* Function calls */ 68typedef struct { 69 int location; 70 int length; 71} range; 72extern range f6(); 73void f7() { 74 range r = f6(); 75} 76 77/* Member expressions */ 78typedef struct { 79 range range1; 80 range range2; 81} rangepair; 82 83void f8() { 84 rangepair p; 85 86 range r = p.range1; 87} 88 89void f9(range *p) { 90 range r = *p; 91} 92 93void f10(range *p) { 94 range r = p[0]; 95} 96 97/* _Bool types */ 98 99struct _w { 100 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; 109 110/* Implicit casts (due to typedefs) */ 111typedef struct _a { 112 int a; 113} a; 114 115void f11() { 116 struct _a a1; 117 a a2; 118 119 a1 = a2; 120 a2 = a1; 121} 122 123/* Implicit casts (due to const) */ 124void f12() { 125 struct _a a1; 126 const struct _a a2; 127 128 a1 = a2; 129} 130 131/* struct initialization */ 132struct a13 {int b; int c;}; 133struct a13 c13 = {5}; 134typedef struct a13 a13; 135struct a14 { short a; int b; } x = {1, 1}; 136 137/* flexible array members */ 138struct a15 {char a; int b[];} c15; 139int a16(void) {c15.a = 1;} 140 141/* compound literals */ 142void f13() { 143 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); 151 int c = __builtin_va_arg(l, a13).c; 152 return b.b; 153} 154 155/* Attribute packed */ 156struct __attribute__((packed)) S2839 { double a[19]; signed char b; } s2839[5]; 157 158struct __attribute__((packed)) SS { long double a; char b; } SS; 159 160 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} 184 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 197