http://d.puremagic.com/issues/show_bug.cgi?id=8956
Summary: Ability to break typesystem with constructor/postblit/destructor (e.g. modify immutable) Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: critical Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: verylonglogin....@gmail.com --- Comment #0 from Denis Shelomovskij <verylonglogin....@gmail.com> 2012-11-03 16:47:40 MSK --- As was mentioned in Issue 4338 and Issue 4867 one is able to break typesystem using postblit/destructor. But that's not all. Constructor also can be used for this. Example: --- int* p1, p2, p3; struct S { int* p; this(int* p) { p1 = this.p = p; } this(this) { p2 = p; } ~this() { p3 = p; } } void main() { immutable s = immutable S(new int); // call constructor { immutable tmp = s; } // call postblit and destructor assert(p1 is s.p && p2 is s.p && p3 is s.p); } --- The worst is that it can be done accidentally. E.g.: --- struct S { int* p; this(int* p) { this.p = p; } // Looks really innocuous, isn't it? } void main() { int i; immutable s = immutable S(&i); // Feel constructor's destructive power! assert(&i is s.p); } --- Please, create enhancement requests as other issues and add e.g. `Depends on` links here. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------