// RUN: %clang_cc1 -fsyntax-only -verify %s
struct X {
  union {
    float f3;
    double d2;
  } named;

  union {
    int i;
    float f;
    
    union {
      float f2;
      double d;
    };
  };

  struct {
    int a;
    float b;
  };
};

void test_unqual_references(struct X x, const struct X xc) {
  x.i = 0;
  x.f = 0.0;
  x.f2 = x.f;
  x.d = x.f;
  x.f3 = 0; // expected-error{{no member named 'f3'}}
  x.a = 0;

  xc.d = 0.0; // expected-error{{read-only variable is not assignable}}
  xc.f = 0; // expected-error{{read-only variable is not assignable}}
  xc.a = 0; // expected-error{{read-only variable is not assignable}}
}


struct Redecl {
  int x; // expected-note{{previous declaration is here}}
  struct y { };

  union {
    int x; // expected-error{{member of anonymous union redeclares 'x'}}
    float y;
    double z; // expected-note{{previous declaration is here}}
    double zz; // expected-note{{previous declaration is here}}
  };

  int z; // expected-error{{duplicate member 'z'}}
  void zz(); // expected-error{{duplicate member 'zz'}} 
};

union { // expected-warning{{declaration does not declare anything}}
  int int_val;
  float float_val;
};

static union { // expected-warning{{declaration does not declare anything}}
  int int_val2;
  float float_val2;
};

void f() {
  int_val2 = 0; // expected-error{{use of undeclared identifier}}
  float_val2 = 0.0; // expected-error{{use of undeclared identifier}}
}

void g() {
  union { // expected-warning{{declaration does not declare anything}}
    int i;
    float f2;
  };
  i = 0; // expected-error{{use of undeclared identifier}}
  f2 = 0.0; // expected-error{{use of undeclared identifier}}
}

// <rdar://problem/6483159>
struct s0 { union { int f0; }; };

// <rdar://problem/6481130>
typedef struct { }; // expected-warning{{declaration does not declare anything}}

// PR3675
struct s1 {
  int f0; // expected-note{{previous declaration is here}}
  union {
    int f0; // expected-error{{member of anonymous union redeclares 'f0'}}
  };
};

// PR3680
struct {}; // expected-warning{{declaration does not declare anything}}

struct s2 {
  union {
    int a;
  } // expected-warning{{expected ';' at end of declaration list}}
}; // expected-error{{expected member name or ';' after declaration specifiers}}

// Make sure we don't a.k.a. anonymous structs.
typedef struct {
  int x;
} a_struct;
int tmp = (a_struct) { .x = 0 }; // expected-error {{initializing 'int' with an expression of incompatible type 'a_struct'}}

// This example comes out of the C11 standard; make sure we don't accidentally reject it.
struct s {
  struct { int i; };
  int a[];
};
