1 // RUN: %clang_cc1 -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 range r = f6(); 75 } 76 77 /* Member expressions */ 78 typedef struct { 79 range range1; 80 range range2; 81 } rangepair; 82 83 void f8() { 84 rangepair p; 85 86 range r = p.range1; 87 } 88 89 void f9(range *p) { 90 range r = *p; 91 } 92 93 void f10(range *p) { 94 range r = p[0]; 95 } 96 97 /* _Bool types */ 98 99 struct _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) */ 111 typedef struct _a { 112 int a; 113 } a; 114 115 void f11() { 116 struct _a a1; 117 a a2; 118 119 a1 = a2; 120 a2 = a1; 121 } 122 123 /* Implicit casts (due to const) */ 124 void f12() { 125 struct _a a1; 126 const struct _a a2; 127 128 a1 = a2; 129 } 130 131 /* struct initialization */ 132 struct a13 {int b; int c;}; 133 struct a13 c13 = {5}; 134 typedef struct a13 a13; 135 struct a14 { short a; int b; } x = {1, 1}; 136 137 /* flexible array members */ 138 struct a15 {char a; int b[];} c15; 139 int a16(void) {c15.a = 1;} 140 141 /* compound literals */ 142 void f13() { 143 a13 x; x = (a13){1,2}; 144 } 145 146 /* va_arg */ 147 int 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 */ 156 struct __attribute__((packed)) S2839 { double a[19]; signed char b; } s2839[5]; 157 158 struct __attribute__((packed)) SS { long double a; char b; } SS; 159 160 161 /* As lvalue */ 162 163 int f15() { 164 extern range f15_ext(); 165 return f15_ext().location; 166 } 167 168 range f16() { 169 extern rangepair f16_ext(); 170 return f16_ext().range1; 171 } 172 173 int f17() { 174 extern range f17_ext(); 175 range r; 176 return (r = f17_ext()).location; 177 } 178 179 range 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. 188 struct f19S; 189 extern struct f19T { 190 struct f19S (*p)(void); 191 } t; 192 struct f19S { int i; }; 193 void f19(void) { 194 t.p(); 195 } 196 197