// RUN: %clang_cc1 %s -emit-llvm -o -

union u_tag {
  int a;
  float b;
} u;

void f(void) {
  u.b = 11;
}

float get_b(union u_tag *my_u) {
  return my_u->b;
}

int f2( float __x ) { 
  union{ 
    float __f; 
    unsigned int __u; 
  }__u;
  return (int)(__u.__u >> 31); 
}

typedef union { int i; int *j; } value;

int f3(value v) {
  return *v.j;
}

enum E9 { one, two };
union S65 { enum E9 a; } ; union S65 s65;
void fS65(void) { enum E9 e = s65.a; } 

typedef union{
  unsigned char x[65536];
} q;
void qfunc(void) {q buf; unsigned char* x = buf.x;}

union RR {_Bool a : 1;} RRU;
int RRF(void) {return RRU.a;}

// PR6164
typedef union T0 { unsigned int : 0; } T0;
T0 t0;

union { int large_bitfield: 31; char c } u2;

struct dt_t_s {
  union {
    long long u : 56;
  } __attribute__((packed));
};
struct {
  struct {
    struct {
      struct dt_t_s t;
    };
  };
} a;
