www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 23293] New: ImportC: Bit fields layout doesn't match C

https://issues.dlang.org/show_bug.cgi?id=23293

          Issue ID: 23293
           Summary: ImportC: Bit fields layout doesn't match C
           Product: D
           Version: D2
          Hardware: All
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: kinke gmx.net

This C code fails with DMD v2.100.1 on Linux x64:
```
struct S {
    unsigned char a:7; // byte offset 0, bit offset 0
    _Bool b:1;         // byte offset 0, bit offset 7
    _Bool c:1;         // byte offset 1, bit offset 0
    unsigned d:22;     // byte offset 1, bit offset 1
    _Bool e:1;         // byte offset 4, bit offset 0 (wrong)
                       // should probably be: byte offset 3, bit offset 7
                       //                 or: byte offset 1, bit offset 23
};

_Static_assert(sizeof(struct S) == 4, "size != 4"); // 8 with DMD
```

The size is 4 with both latest clang and gcc on Linux:
https://cpp.godbolt.org/z/h4z938e5z

I haven't checked on Windows.

--
Aug 14 2022