https://issues.dlang.org/show_bug.cgi?id=17461
--- Comment #1 from Manu <[email protected]> --- For clarity; the high-level flow of the disassembly is: void t() { B __tmpfordtor1804 = u1(); B __tmpfordtor1805 = void; // uninitialised if (__tmpfordtor1804) { __tmpfordtor1805 = u1(); // initialised here A(__tmpfordtor1805); } else { A(u2); } // __tmpfordtor1805 destructs, may not have been initialised! __tmpfordtor1805.~this(); // __tmpfordtor1804 destructs, no problem __tmpfordtor1804.~this(); } --
