www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 14860] New: Destructor is not called for block assignment

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

          Issue ID: 14860
           Summary: Destructor is not called for block assignment
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: wrong-code
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: k.hara.pg gmail.com

It's similar to 14815.

From: http://forum.dlang.org/thread/wkwzokdccfbjnzeqmqmz forum.dlang.org

uint dtorCount;

struct S
{
    uint x;
    void opAssign(const ref S rhs) { assert(false, "Not called"); }
    ~this() { ++dtorCount; }
}

void main()
{
    S[] a;
    a.length = 1;
    a[0].x = 42; // Some random non-init value

    a[] = S.init;

    assert(a[0].x == 0); // As expected, the value has been reset
    assert(dtorCount == 0); // Passes?!?
}

--
Aug 01 2015