[Issue 21969] New: importC: Error: bit fields are not supported
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue May 25 14:31:11 UTC 2021
https://issues.dlang.org/show_bug.cgi?id=21969
Issue ID: 21969
Summary: importC: Error: bit fields are not supported
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: major
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: ibuclaw at gdcproject.org
Bitfields can be supported by merging and replacing them with a representative
field - ignoring any field name of the bitfield.
---
struct bitfieldsA
{
int start;
unsigned codes : 11;
int end;
};
struct bitfieldsB
{
int start;
unsigned codes : 11;
unsigned reserved : 5;
unsigned flags : 16;
int end;
};
struct bitfieldsC
{
int start;
unsigned codes : 11;
unsigned reserved : 5;
unsigned : 0;
unsigned flags : 16;
int end;
};
---
The above can be translated into the following D representation without
compromising ABI.
---
struct bitfieldsA
{
int start;
ushort __bitfield_padding_0;
int end;
}
struct bitfieldsB
{
int start;
uint __bitfield_padding_0;
int end;
}
struct bitfieldsC
{
int start;
ushort __bitfield_padding_0;
ushort __bitfield_padding_1;
int end;
}
---
As per the specification:
C99 6.7.2.1-11:
An implementation may allocate any addressable storage unit large enough to
hold a bit-field. If enough space remains, a bit-field that immediately
follows another bit-field in a structure shall be packed into adjacent bits of
the same unit. If insufficient space remains,whether a bit-field that does not
fit is put into the next unit or overlaps adjacent units is
implementation-defined.
C99 6.7.2.1-12:
A bit-field declaration with no declarator, but only a colon and a width,
indicates an unnamed bit-field. As a special case, a bit-field structure member
with a width of 0 indicates that no further bit-field is to be packed into the
unit in which the previous bit-field, if any, was placed.
--
More information about the Digitalmars-d-bugs
mailing list