llvm: Match new LLVM 128-bit integer alignment on sparc by maurer · Pull Request #132422 · rust-lang/rust (original) (raw)
tgross35 added a commit to tgross35/rust that referenced this pull request
Rust's 128-bit integers have historically been incompatible with C 1. However, there have been a number of changes in Rust and LLVM that mean this is no longer the case:
- Incorrect alignment of
i128
on x86 1: adjusting Rust's alignment proposed at rust-lang/compiler-team#683, implemented at rust-lang#116672. - LLVM version of the above: resolved in LLVM, including ABI fix. Present in LLVM18 (our minimum supported version).
- Incorrect alignment of
i128
on 64-bit PowerPC, SPARC, and MIPS 2: Rust's data layouts adjusted at rust-lang#132422, rust-lang#132741, rust-lang#134115. - LLVM version of the above: done in LLVM 20 llvm/llvm-project#102783.
- Incorrect return convention of
i128
on Windows: adjusted to match GCC and Clang at rust-lang#134290.
At [3], the lang team considered it acceptable to remove i128
from
improper_ctypes_definitions
if the LLVM version is known to be
compatible. Time has elapsed since then and we have dropped support for
LLVM versions that do not have the x86 fixes, meaning a per-llvm-version
lint should no longer be necessary. The PowerPC, SPARC, and MIPS changes
only came in LLVM 20 but since Rust's datalayouts have also been updated
to match, we will be using the correct alignment regardless of LLVM
version.
Closes: rust-lang#134288 Closes: rust-lang#128950