digitalmars.D.bugs - [Issue 13531] New: Destructor attributes don't take member
- via Digitalmars-d-bugs (51/51) Sep 25 2014 https://issues.dlang.org/show_bug.cgi?id=13531
https://issues.dlang.org/show_bug.cgi?id=13531 Issue ID: 13531 Summary: Destructor attributes don't take member destructor attributes into account Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: monarchdodra gmail.com If you have "S" with completely unsafe destructor, and you aggregate it into "SS": //---- struct S { ~this() //not nothrow, system, impure, gc etc... {} } struct SS { S s; ~this() safe pure nothrow nogc {} } //---- This compiles. This may or may not be wrong, depending on your point of view: The "code content" of the destructor is indeed actually safe etc... The issue comes if you actually do try to use it in a safe context: //---- void main() safe pure nothrow nogc { SS ss; } //---- Here is the error message: //---- Error: pure function 'D main' cannot call impure function 'main.SS.~this' Error: safe function 'D main' cannot call system function 'main.SS.~this' Error: nogc function 'D main' cannot call non- nogc function 'main.SS.~this' Error: 'main.SS.~this' is not nothrow Error: function 'D main' is nothrow yet may throw //---- The issue here is that it clearly states that "SS.~this" is the one that is unsafe, yet it is clearly marked as such. IMO, the bug is that it should have never been legally marked as safe to begin with. --
Sep 25 2014