[Issue 24324] New: A default-initialized variable is not identical to its init value when it contains a default-initialized member variable that is a dynamic array
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Jan 8 05:36:53 UTC 2024
https://issues.dlang.org/show_bug.cgi?id=24324
Issue ID: 24324
Summary: A default-initialized variable is not identical to its
init value when it contains a default-initialized
member variable that is a dynamic array
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: issues.dlang at jmdavisProg.com
struct S
{
int[] arr = [1, 2, 3];
}
void main()
{
S s1;
S s2;
assert(s1 is s2); // passes
assert(s1 is S.init); //fails
}
For some reason, the member variable ends up pointing to a different block of
memory in the init value than it does in default-initialized values of the
struct type. The elements are identical in both the init value and the
default-initialized structs, but the arrays themselves are not identical.
For plenty of code, the difference won't matter, but it does create the bizarre
situation where a default-initialized struct is not identical to its init
value, and you lose the ability to check whether a value of that struct type
has been mutated, which you can normally do with all types with "value is
typeof(value).init".
--
More information about the Digitalmars-d-bugs
mailing list