https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121150
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Tomasz KamiĆski from comment #6) > What about doing: > __uint128 u = 0x1; > u <<= 32u; > u |= 0x2345; > u <<= 32u; > u |= 0x6789; > __int128 i = u; There's no problem forming the constant 0x123456789 is there? The problem for x32 is just that (size_t)0x123456789 != 0x123456789 because size_t is only 32-bit. For (all?) other targets that support __int128, size_t is 64-bit.