digitalmars.D.bugs - [Issue 21669] New: closure over type with destructor allows
- d-bugmail puremagic.com (42/42) Feb 27 2021 https://issues.dlang.org/show_bug.cgi?id=21669
https://issues.dlang.org/show_bug.cgi?id=21669 Issue ID: 21669 Summary: closure over type with destructor allows accessing destroyed value if used after scope exits Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: schveiguy gmail.com An example: import std.stdio; struct S { int i; ~this() { i = -1;} } void main() { int delegate() dg; { S s; dg = () { return s.i; }; writeln(dg()); // 0 } writeln(dg()); // -1 } Allowing access to a destroyed variable where a destructor has invalidated the object should not be allowed. Prior to 2.053, this was an error. According to Paul Backus, the responsible PR was this: https://github.com/dlang/dmd/pull/5292 One who has created a delegate would probably expect that when calling the delegate at a later time, the state of the object should be preserved, and not destroyed. For some cases, it might be dangerous safety-wise to use an object after destruction. Fixing this issue probably requires a long deprecation period, as no doubt code that depends on this (or works in spite of the dangers) exists today. --
Feb 27 2021