https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83294
Bug ID: 83294 Summary: int32_t & related definitions wrong with -funsigned-bitfields Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: bugdal at aerifal dot cx Target Milestone: --- The following minimal test case fails with -funsigned-bitfields: struct { int32_t x:1 } foo; foo.x = -1; assert(foo.x < 0); This is because __INT32_TYPE__, etc. are defined as plain "int" rather than "signed int", and C specifies that, when the implementation interprets plain int as unsigned in a bitfield context, it must also do this for typedefs (see footnote 125 in n1570). Presumably changing __INT32_TYPE__ and related macros to an explicit "signed int" will fix the problem.