[Issue 19919] New: Incorrect initialization of union when first member isn't marked = void
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed May 29 10:41:41 UTC 2019
https://issues.dlang.org/show_bug.cgi?id=19919
Issue ID: 19919
Summary: Incorrect initialization of union when first member
isn't marked = void
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: simen.kjaras at gmail.com
unittest {
union U {
int n;
float f = 3.14f;
}
U u;
assert(u.f == 3.14f);
}
The above assert should pass, as U has exactly one explicit initializer.
Instead, the value of u.f is 0.0, because int.init is used instead. Another
option is that the above should fail to compile with an 'overlapping default
initialization' error.
If n is void-initialized, f is correctly set to 3.14f. If n is a type with an
initalizer other than 0, the initial value changes. (if n's initializer is
1078523331, the assert passes)
--
More information about the Digitalmars-d-bugs
mailing list