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