| // RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | 
 |  | 
 | struct  { | 
 |   int x; | 
 |   int y; | 
 | } point; | 
 |  | 
 | void fn1() { | 
 |   point.x = 42; | 
 | } | 
 |  | 
 | /* Nested member */ | 
 | struct  { | 
 |   struct { | 
 |     int a; | 
 |     int b; | 
 |   } p1; | 
 | } point2; | 
 |  | 
 | void fn2() { | 
 |   point2.p1.a = 42; | 
 | } | 
 |  | 
 | /* Indirect reference */ | 
 | typedef struct __sf { | 
 |  unsigned char *c; | 
 |  short flags; | 
 | } F; | 
 |  | 
 | typedef struct __sf2 { | 
 |   F *ff; | 
 | } F2; | 
 |  | 
 | int fn3(F2 *c) { | 
 |   if (c->ff->c >= 0) | 
 |     return 1; | 
 |   else | 
 |     return 0; | 
 | } | 
 |  | 
 | /* Nested structs */ | 
 | typedef struct NA { | 
 |   int data; | 
 |   struct NA *next; | 
 | } NA; | 
 | void f1() {  NA a; } | 
 |  | 
 | typedef struct NB { | 
 |   int d1; | 
 |   struct _B2 { | 
 |     int d2; | 
 |     struct NB *n2; | 
 |   } B2; | 
 | } NB; | 
 |  | 
 | void f2() { NB b; } | 
 |  | 
 | extern NB *f3(); | 
 | void f4() { | 
 |   f3()->d1 = 42; | 
 | } | 
 |  | 
 | void f5() { | 
 |   (f3())->d1 = 42; | 
 | } | 
 |  | 
 | /* Function calls */ | 
 | typedef struct { | 
 |   int location; | 
 |   int length; | 
 | } range; | 
 | extern range f6(); | 
 | void f7() { | 
 |   range r = f6(); | 
 | } | 
 |  | 
 | /* Member expressions */ | 
 | typedef struct { | 
 |   range range1; | 
 |   range range2; | 
 | } rangepair; | 
 |  | 
 | void f8() { | 
 |   rangepair p; | 
 |  | 
 |   range r = p.range1; | 
 | } | 
 |  | 
 | void f9(range *p) { | 
 |   range r = *p; | 
 | } | 
 |  | 
 | void f10(range *p) { | 
 |   range r = p[0]; | 
 | } | 
 |  | 
 | /* _Bool types */ | 
 |  | 
 | struct _w { | 
 |   short a,b; | 
 |   short c,d; | 
 |   short e,f; | 
 |   short g; | 
 |  | 
 |   unsigned int h,i; | 
 |  | 
 |   _Bool j,k; | 
 | } ws; | 
 |  | 
 | /* Implicit casts (due to typedefs) */ | 
 | typedef struct _a { | 
 |   int a; | 
 | } a; | 
 |  | 
 | void f11() { | 
 |   struct _a a1; | 
 |   a a2; | 
 |      | 
 |   a1 = a2; | 
 |   a2 = a1; | 
 | } | 
 |  | 
 | /* Implicit casts (due to const) */ | 
 | void f12() { | 
 |   struct _a a1; | 
 |   const struct _a a2; | 
 |  | 
 |   a1 = a2; | 
 | } | 
 |  | 
 | /* struct initialization */ | 
 | struct a13 {int b; int c;}; | 
 | struct a13 c13 = {5}; | 
 | typedef struct a13 a13; | 
 | struct a14 { short a; int b; } x = {1, 1}; | 
 |  | 
 | /* flexible array members */ | 
 | struct a15 {char a; int b[];} c15; | 
 | int a16(void) {c15.a = 1;} | 
 |  | 
 | /* compound literals */ | 
 | void f13() { | 
 |   a13 x; x = (a13){1,2}; | 
 | } | 
 |  | 
 | /* va_arg */ | 
 | int f14(int i, ...) { | 
 |   __builtin_va_list l; | 
 |   __builtin_va_start(l,i); | 
 |   a13 b = __builtin_va_arg(l, a13); | 
 |   int c = __builtin_va_arg(l, a13).c; | 
 |   return b.b; | 
 | } | 
 |  | 
 | /* Attribute packed */ | 
 | struct __attribute__((packed)) S2839 { double a[19];  signed char b; } s2839[5]; | 
 |  | 
 | struct __attribute__((packed)) SS { long double a; char b; } SS; | 
 |  | 
 |  | 
 | /* As lvalue */ | 
 |  | 
 | int f15() { | 
 |   extern range f15_ext(); | 
 |   return f15_ext().location; | 
 | } | 
 |  | 
 | range f16() { | 
 |   extern rangepair f16_ext(); | 
 |   return f16_ext().range1; | 
 | } | 
 |  | 
 | int f17() { | 
 |   extern range f17_ext(); | 
 |   range r; | 
 |   return (r = f17_ext()).location; | 
 | } | 
 |  | 
 | range f18() { | 
 |   extern rangepair f18_ext(); | 
 |   rangepair rp; | 
 |   return (rp = f18_ext()).range1; | 
 | } |