text: // RUN: clang-cc -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;
  }
  