Clang and GCC disagree on the ABI of __int128
(and its various unsigned
/_t
variants) on x64 linux (at least).
The issue is that when pushing __int128
to the stack, clang only aligns to 8, even though in structs it's aligned to 16.
This causes Clang and GCC to disagree on the offset for by-value __int128
arguments that need padding to be 16-aligned.
The following function signature demonstrates this in practice:
void i128_val_in_0_perturbed_small(
uint8_t arg0,