File 0003-Translate-target-features-for-LLVM9.patch of Package rust
From b57c499ea227a973fc3eb319cbe6d5019948d86c Mon Sep 17 00:00:00 2001
From: Nikita Popov <nikita.ppv@gmail.com>
Date: Sun, 7 Jul 2019 17:44:00 +0200
Subject: [PATCH] Translate target features for LLVM 9
Part of: Prepare for LLVM 9 update
https://github.com/rust-lang/rust/pull/62474
---
src/librustc_codegen_llvm/attributes.rs | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/src/librustc_codegen_llvm/attributes.rs b/src/librustc_codegen_llvm/attributes.rs
index 94abf1796d36..33b50401b22f 100644
--- a/src/librustc_codegen_llvm/attributes.rs
+++ b/src/librustc_codegen_llvm/attributes.rs
@@ -119,6 +119,29 @@ pub fn set_probestack(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
const_cstr!("probe-stack"), const_cstr!("__rust_probestack"));
}
+fn translate_obsolete_target_features(feature: &str) -> &str {
+ const LLVM9_FEATURE_CHANGES: &[(&str, &str)] = &[
+ ("+fp-only-sp", "-fp64"),
+ ("-fp-only-sp", "+fp64"),
+ ("+d16", "-d32"),
+ ("-d16", "+d32"),
+ ];
+ if llvm_util::get_major_version() >= 9 {
+ for &(old, new) in LLVM9_FEATURE_CHANGES {
+ if feature == old {
+ return new;
+ }
+ }
+ } else {
+ for &(old, new) in LLVM9_FEATURE_CHANGES {
+ if feature == new {
+ return old;
+ }
+ }
+ }
+ feature
+}
+
pub fn llvm_target_features(sess: &Session) -> impl Iterator<Item = &str> {
const RUSTC_SPECIFIC_FEATURES: &[&str] = &[
"crt-static",
@@ -129,6 +152,7 @@ pub fn llvm_target_features(sess: &Session) -> impl Iterator<Item = &str> {
sess.target.target.options.features.split(',')
.chain(cmdline)
.filter(|l| !l.is_empty())
+ .map(translate_obsolete_target_features)
}
pub fn apply_target_cpu_attr(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {