[Issue 17869] New: scope class object no longer deleted when created via factory function
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Oct 1 15:00:58 UTC 2017
https://issues.dlang.org/show_bug.cgi?id=17869
Issue ID: 17869
Summary: scope class object no longer deleted when created via
factory function
Product: D
Version: D2
Hardware: x86_64
OS: Windows
Status: NEW
Keywords: wrong-code
Severity: regression
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: r.sagitario at gmx.de
import core.stdc.stdio;
void foo()
{
scope baseKey = Key.getKey();
}
int main(string[] argv)
{
printf("main init\n");
foo();
printf("main exit\n");
return 0;
}
class Key
{
private:
this() { printf("ctor\n"); }
~this() { printf("dtor\n"); }
static Key getKey() { return new Key(); }
}
////////////////////////
This prints
main init
ctor
dtor
main exit
with dmd 2.074 and
main init
ctor
main exit
dtor
with dmd 2.075+, i.e. the class instance assigned to the scope variable is
destroyed in the final collection, not in foo's scope. The 2.074 version is
according to spec IMO: "... the destructor for an object is automatically
called when the reference to it goes out of scope."
Probably introduced by https://github.com/dlang/dmd/pull/6826
--
More information about the Digitalmars-d-bugs
mailing list