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: