about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2024-12-26 19:47:41 +0100
committerRalf Jung <post@ralfj.de>2024-12-31 12:41:20 +0100
commitf06f5684112ac2de345819b9da513035f253764b (patch)
tree98633d38d878765110c589e8ee394bcf7d73ac04
parente6e72ce158daf8651bef919b4d7de619de1d4737 (diff)
downloadrust-f06f5684112ac2de345819b9da513035f253764b.tar.gz
rust-f06f5684112ac2de345819b9da513035f253764b.zip
x86-64 hardfloat actually requires sse2
-rw-r--r--src/gcc_util.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/gcc_util.rs b/src/gcc_util.rs
index b0fd07827d6..3e579d75d86 100644
--- a/src/gcc_util.rs
+++ b/src/gcc_util.rs
@@ -129,12 +129,18 @@ pub(crate) fn global_gcc_features(sess: &Session, diagnostics: bool) -> Vec<Stri
                     });
                 }
             } else {
-                if abi_enable_set.contains(feature) {
-                    sess.dcx().emit_warn(ForbiddenCTargetFeature {
-                        feature,
-                        enabled: "disabled",
-                        reason: "this feature is required by the target ABI",
-                    });
+                // FIXME: we have to request implied features here since
+                // negative features do not handle implied features above.
+                #[allow(rustc::potential_query_instability)] // order does not matter
+                for &required in abi_enable_set.iter() {
+                    let implied = sess.target.implied_target_features(std::iter::once(required));
+                    if implied.contains(feature) {
+                        sess.dcx().emit_warn(ForbiddenCTargetFeature {
+                            feature,
+                            enabled: "disabled",
+                            reason: "this feature is required by the target ABI",
+                        });
+                    }
                 }
             }