[Issue 15271] New: Parameters of final classes become uninitialised in out contracts with DMD only
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sat Oct 31 06:02:45 PDT 2015
https://issues.dlang.org/show_bug.cgi?id=15271
Issue ID: 15271
Summary: Parameters of final classes become uninitialised in
out contracts with DMD only
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: critical
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: lt.infiltrator at gmail.com
---------------------------------------------
final class C {
void property(uint rate)
out {
assert(_rate == rate, "This will fail");
} body { _rate = rate; }
this() { }
uint _rate;
}
void main() {
auto c = new C;
c.property = 25;
}
---------------------------------------------
This only fails with DMD. v2.068 for sure; and as far back as 2.065 if memory
serves. I'm not sure whether it ever worked with DMD. It works fine with GDC.
I haven't tested it with LDC.
If the class is made non-final, or the method is made a UFCS function taking C
as the first parameter, then the issue disappears.
Rationale for the "critical" severity: first-class support for unittests and
contracts is one of the big selling points for D. Therefore, out contracts not
working properly seems like a critical issue. Feel free to disagree.
--
More information about the Digitalmars-d-bugs
mailing list