// P1272R4
// { dg-do compile { target c++14 } }

struct S { unsigned char a[2]; alignas(sizeof 0) int b; };
struct T { char a; alignas(sizeof 0) int b; };
struct U { char a : 1; char : 6; char b : 1; };
struct V { int a; S b; };
struct W { unsigned a; T b; };

constexpr bool
f1 ()
{
  T t = { 1, 2 };
  S s = __builtin_bit_cast (S, t);
  return s.a[0] == 1;
}

constexpr bool
f2 ()
{
  U u = { 0, 0 };
  unsigned char a = __builtin_bit_cast (unsigned char, u);
  return true;
}

constexpr bool
f3 ()
{
  T t = { 1, 2 };
  S s = __builtin_bit_cast (S, t);
  return s.a[1] == 0;
}

constexpr bool
f4 ()
{
  U u = { 0, 0 };
  unsigned char a = __builtin_bit_cast (unsigned char, u);
  return a == 0;		// { dg-error "is not a constant expression" }
}

constexpr bool
f5 ()
{
  W t = { 1, 2 };
  V s = __builtin_bit_cast (V, t);
  return s.b.a[0] == 1;
}

constexpr bool
f6 ()
{
  W t = { 1, 2 };
  V s = __builtin_bit_cast (V, t);
  return s.b.a[1] == 1;
}

constexpr bool a = f1 ();
constexpr bool b = f2 ();
constexpr bool c = f3 ();	// { dg-error "accessing uninitialized array element" }
constexpr bool d = f4 ();
constexpr bool e = f5 ();
constexpr bool f = f6 ();	// { dg-error "accessing uninitialized array element" }
