[Issue 19079] New: Destructors not called in named unions

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Jul 12 08:53:59 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=19079

          Issue ID: 19079
           Summary: Destructors not called in named unions
           Product: D
           Version: D2
          Hardware: x86
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: simen.kjaras at gmail.com

When a type T with a destructor is placed in a named union, T's destructor is
not called when the union goes out of scope or is destroyed with destroy().

https://dlang.org/spec/struct.html states that 'Unions may not have fields that
have destructors', so this may be undefined behavior.


struct S  { ~this() { throw new Exception(""); } }
struct S1 { union { S s; } }
 union U  { S s; }
struct S2 { U u; }

unittest {
    import std.exception;


    // Correct behavior:
    assertThrown((){ S s; }());
    assertThrown((){ S s; destroy(s); }());
    assertThrown((){ S1 s1; }());
    assertThrown((){ S1 s1; destroy(s1); }());

    // Incorrect behavior:
    assertNotThrown((){ U u; }());
    assertNotThrown((){ U u; destroy(u); }());
    assertNotThrown((){ S2 s2; }());
    assertNotThrown((){ S2 s2; destroy(s2); }());
}

--


More information about the Digitalmars-d-bugs mailing list