[Issue 1164] Wrong order of memory deallocation

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Fri Jul 4 01:21:11 PDT 2014


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

Pieter Penninckx <pieter.penninckx at scarlet.be> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pieter.penninckx at scarlet.be
            Version|D1                          |2.040

--- Comment #5 from Pieter Penninckx <pieter.penninckx at scarlet.be> ---
Reproduced with DMD version 2.065.


If the destructor cannot reference sub objects, this implies that also an
invariant cannot reference sub objects, because an invariant is called just
before the destructor. Example below triggers segfault with DMD version 2.065.


class B
{
    double a, b, c, d, e, f, g, h;
    bool fun() const { return true;    }
}

class A
{
    B b;
    invariant() {
        assert(b !is null);
        if (b.fun()) // <- Segfault here, but b is not null.
        { assert(true);    }
    }
    this() { b = new B(); }
    ~this()    {}
}

int main() {
    A a = new A();
    return 0;
}

--


More information about the Digitalmars-d-bugs mailing list