https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88662
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |documentation --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to gnzlbg from comment #0) > 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` Because (unsigned int)b is undefined otherwise. > [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. The representation of _Bool is unspecified, not implementation-defined, so doesn't need to be documented.