https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116224
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- This needs to be signed char g; int foo (signed char c, int i, _BitInt(65) b) { __builtin_memmove (&g, &b, 1); return b / i / c; } int main () { int x = foo (-15, -15, 900); if (x != 4) __builtin_abort (); } because you are relying on the char being signed.