LLVM data layout for i128
doesn't match Clang's alignment of __int128_t
on 64-bit PowerPC, 64-bit SPARC and 64-bit MIPS · Issue #102783 · llvm/llvm-project (original) (raw)
On 64-bit PowerPC, 64-bit SPARC and 64-bit MIPS, Clang gives __int128_t
an alignment of 16 whereas the LLVM data layout (implicitly) gives i128
an alignment of 8. This means that LLVM-based compilers that use the LLVM data layout alignment directly (such as rustc
) are ABI incompatible with Clang itself. This is the same as a previous bug on x86-64 that was fixed in D86310, just on different targets. As Clang's behaviour matches GCC (and the PowerPC64 ABI specification) the LLVM data layout is what needs to be updated.
Affected architectures:
- 64-bit PowerPC: Fixed by [PowerPC] Update data layout aligment of i128 to 16 #118004
- 64-bit SPARC: Fixed by [SPARC] Align i128 to 16 bytes in SPARC datalayouts #106951
- 64-bit MIPS: Fixed by [MIPS] LLVM data layout give i128 an alignment of 16 for mips64 #112084