Rollup merge of #143125 - tgross35:aarch64-neon-llvm19-f16, r=cuviper

Disable f16 on Aarch64 without neon for llvm < 20.1.1

This check was added unconditionally in c51b229140 ("Disable f16 on Aarch64 without `neon`") and reverted in 4a8d35709e ("Revert "Disable `f16` on Aarch64 without `neon`"") since it did not fail in Rust's build. However, it is still possible to hit this crash if using LLVM 19 built with assertions, so disable the type conditionally based on version here.

Note that for these builds, a similar patch is needed in the build script for `compiler-builtins` since it does not yet use `cfg(target_has_reliable_f16)` (hopefully to be resolved in the near future).

Report: https://github.com/rust-lang/rust/pull/139276#issuecomment-3014781652
Original LLVM issue: https://github.com/llvm/llvm-project/issues/129394
This commit is contained in:
Matthias Krüger
2025-07-01 04:25:34 +02:00
committed by GitHub

View File

@@ -370,10 +370,18 @@ fn update_target_reliable_float_cfg(sess: &Session, cfg: &mut TargetConfig) {
let target_env = sess.target.options.env.as_ref(); let target_env = sess.target.options.env.as_ref();
let target_abi = sess.target.options.abi.as_ref(); let target_abi = sess.target.options.abi.as_ref();
let target_pointer_width = sess.target.pointer_width; let target_pointer_width = sess.target.pointer_width;
let version = get_version();
cfg.has_reliable_f16 = match (target_arch, target_os) { cfg.has_reliable_f16 = match (target_arch, target_os) {
// Selection failure <https://github.com/llvm/llvm-project/issues/50374> // Selection failure <https://github.com/llvm/llvm-project/issues/50374>
("s390x", _) => false, ("s390x", _) => false,
// LLVM crash without neon <https://github.com/llvm/llvm-project/issues/129394> (now fixed)
("aarch64", _)
if !cfg.target_features.iter().any(|f| f.as_str() == "neon")
&& version < (20, 1, 1) =>
{
false
}
// Unsupported <https://github.com/llvm/llvm-project/issues/94434> // Unsupported <https://github.com/llvm/llvm-project/issues/94434>
("arm64ec", _) => false, ("arm64ec", _) => false,
// MinGW ABI bugs <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054> // MinGW ABI bugs <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115054>