https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121150
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to H.J. Lu from comment #2) > + __int128 i = (__int128)INT64_C(0x123456789); This doesn't do anything, it's already a signed 64-bit value. The problem is that h(__i) truncates it to 32-bit size_t and that changes the value.