| // RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify %s |
| |
| namespace PR61118 { |
| |
| union S { |
| struct { |
| int a; |
| }; |
| }; |
| |
| void f(int x, auto) { |
| const S result { |
| .a = x |
| }; |
| } |
| |
| void g(void) { |
| f(0, 0); |
| } |
| |
| } // end namespace PR61118 |
| |
| namespace GH65143 { |
| struct Inner { |
| int a; |
| }; |
| |
| struct Outer { |
| struct { |
| Inner inner; |
| }; |
| }; |
| |
| template <int val> void f() { |
| constexpr Outer x{.inner = {val}}; |
| static_assert(x.inner.a == val); |
| } |
| |
| void bar() { f<4>(); } |
| } |
| |
| namespace GH62156 { |
| union U1 { |
| int x; |
| float y; |
| }; |
| |
| struct NonTrivial { |
| NonTrivial(); |
| ~NonTrivial(); |
| }; |
| |
| union U2 { |
| NonTrivial x; |
| float y; |
| }; |
| |
| void f() { |
| U1 u{.x=2, // expected-note {{previous initialization is here}} |
| .y=1}; // expected-error {{initializer partially overrides prior initialization of this subobject}} |
| new U2{.x = NonTrivial{}, // expected-note {{previous initialization is here}} |
| .y=1}; // expected-error {{initializer would partially override prior initialization of object of type 'NonTrivial' with non-trivial destruction}} |
| } |
| } |