[Issue 24034] New: Changing this in constructor allows to modify immutable members of other instance
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Jul 6 15:39:24 UTC 2023
https://issues.dlang.org/show_bug.cgi?id=24034
Issue ID: 24034
Summary: Changing this in constructor allows to modify
immutable members of other instance
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: tim.dlang at t-online.de
Pull request https://github.com/dlang/dmd/pull/15389 for issue 24024 allows to
modify `this` for classes inside functions. In constructors this allows to
modify immutable members of another instance of the same class. The constructor
will now also return the wrong pointer.
import std.stdio;
class C
{
immutable int i;
this(int i, C other)
{
if (other !is null)
this = other;
this.i = i;
}
}
void main()
{
C c1 = new C(1, null);
writeln(c1.i); // prints 1
C c2 = new C(2, c1);
writeln(c1.i); // prints 2
writeln(c2.i); // prints 2
writeln(c1 is c2); // prints true
}
--
More information about the Digitalmars-d-bugs
mailing list