https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88662
Bug ID: 88662 Summary: Document trap representations of _Bool Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: gonzalobg88 at gmail dot com Target Milestone: --- Compiling unsigned int foo(unsigned int x, _Bool b) { return x - (unsigned int)b; } only produces correct results if the value of `_Bool` is either `0` or `1` [0], see https://gcc.godbolt.org/z/l0DPjc: foo: movzx esi, sil mov eax, edi sub eax, esi ret This probably means that all other representations of `_Bool` are trap representations, but this does not appear to be documented anywhere. >From my reading of the C standard, the role that padding bits play for `_Bool` is unclear. [0] one can construct such a _Bool by writing to it via a char* .