| // P1272R4 |
| // { dg-do compile { target c++14 } } |
| |
| struct S { 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); // { dg-error "accessing uninitialized byte" } |
| return s.a[0] == 1; |
| } |
| |
| constexpr bool |
| f2 () |
| { |
| U u = { 0, 0 }; |
| char a = __builtin_bit_cast (char, u); // { dg-error "accessing uninitialized byte" } |
| return true; |
| } |
| |
| constexpr bool |
| f3 () |
| { |
| T t = { 1, 2 }; |
| S s = __builtin_bit_cast (S, t); // { dg-error "accessing uninitialized byte" } |
| return s.a[1] == 0; |
| } |
| |
| constexpr bool |
| f4 () |
| { |
| U u = { 0, 0 }; |
| char a = __builtin_bit_cast (char, u); // { dg-error "accessing uninitialized byte" } |
| return a == 0; |
| } |
| |
| constexpr bool |
| f5 () |
| { |
| W t = { 1, 2 }; |
| V s = __builtin_bit_cast (V, t); // { dg-error "accessing uninitialized byte" } |
| return s.b.a[0] == 1; |
| } |
| |
| constexpr bool |
| f6 () |
| { |
| W t = { 1, 2 }; |
| V s = __builtin_bit_cast (V, t); // { dg-error "accessing uninitialized byte" } |
| return s.b.a[1] == 1; |
| } |
| |
| constexpr bool a = f1 (); |
| constexpr bool b = f2 (); |
| constexpr bool c = f3 (); |
| constexpr bool d = f4 (); |
| constexpr bool e = f5 (); |
| constexpr bool f = f6 (); |