Bug 7362 – forward referenced inner struct with align(1) doesn't add to offset of next field when used inside a union of another struct, that is nested in the same outer struct

Status
RESOLVED
Resolution
FIXED
Severity
minor
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
Linux
Creation time
2012-01-24T10:49:00Z
Last change time
2015-06-09T04:41:31Z
Keywords
wrong-code
Assigned to
nobody
Creator
Marco.Leise

Comments

Comment #0 by Marco.Leise — 2012-01-24T10:49:06Z
This happened to me when I designed data structures for CD sectors, and used an outer struct to wrap all the different sector layouts (Mode1/2 CDs, ...). The short code below is more suited for a unittest: struct Outer { struct Inner1 { union { Inner2 a; } byte I_AM_AT_THE_WRONG_OFFSET; } align(1) struct Inner2 { ubyte x; } } void main() { writeln(Outer.Inner1.I_AM_AT_THE_WRONG_OFFSET.offsetof); } This prints '0', which means that field 'I_AM_AT_THE_WRONG_OFFSET' wasn't correctly offset behind field 'a'. It works correctly when a) align(1) is removed b) Inner2 is declared before Inner1 c) 'a' is not inside a union block
Comment #1 by lovelydear — 2012-04-19T14:44:01Z
Returns 1 on Win32 2.059
Comment #2 by Marco.Leise — 2012-04-20T08:55:45Z
Yes, it has been fixed in the mean time. Add this to the solved bugs for 2.059!