D.gnu - Nested union bug
- Marcus Stojcevich (37/37) Dec 26 2018 Hi,
Hi, I noticed a bug with GDC that I cannot reproduce with other compilers. I can't seem to create an account on the Bugzilla, so I'm reporting it here. It appears that when you have a union nested within a struct which itself is within a union, the union members get placed at position 0 of the struct, which is the same position as the first struct member. This obviously causes issues. I can reproduce it with union > struct > union, but not struct > union or union > struct. I created a minimal example that demonstrates the issue. The align(1) isn't required for the example to work, but I put it there to make sure output is consistent. =============================== import std.stdio; union foo { long ab; struct { align(1): int a; union { int b; } } } void main() { foo x; writefln("Position of a: %d, b: %d", cast(ulong)(&x.a) - cast(ulong)(&x), cast(ulong)(&x.b) - cast(ulong)(&x)); } =============================== LDC, DMD, and GCC (with equivalent C code) all print Position of a: 0, b: 4 GDC prints Position of a: 0, b: 0 My GDC version is 8.2.0, and I am testing with optimizations off. Thanks in advance for looking at this, Marcus Stojcevich
Dec 26 2018