/* https://issues.dlang.org/show_bug.cgi?id=20068 TEST_OUTPUT: --- fail_compilation/union_initialization.d(19): Error: field `B.p` cannot access pointers in `@safe` code that overlap other fields fail_compilation/union_initialization.d(25): Error: field `B.p` cannot access pointers in `@safe` code that overlap other fields --- */ union B { int i; int* p; @safe this(int* p) { this.p = p; int* x = this.p; } @safe this(int** i) { this.p = null; this.p = *i; } } /* TEST_OUTPUT: --- fail_compilation/union_initialization.d(109): Error: immutable field `p` initialized multiple times fail_compilation/union_initialization.d(108): Previous initialization is here. --- */ #line 100 union C { int i; immutable int* p; @safe this(immutable int* p) { this.p = p; this.p = null; } } /* https://issues.dlang.org/show_bug.cgi?id=21229 TEST_OUTPUT: --- fail_compilation/union_initialization.d(223): Error: field `union_` must be initialized in constructor fail_compilation/union_initialization.d(223): Error: field `proxy` must be initialized in constructor --- */ #line 200 struct NeedsInit { int var; long lo; @disable this(); } union Union { NeedsInit ni; } union Proxy { Union union_; } struct S { Union union_; Proxy proxy; this(int arg) { union_.ni.var = arg; proxy.union_.ni.var = arg; } }