diff options
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/llvm_util.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/llvm_util.rs | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs index 2da06e6babe..e0771313f76 100644 --- a/compiler/rustc_codegen_llvm/src/llvm_util.rs +++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs @@ -8,9 +8,8 @@ use rustc_session::config::PrintRequest; use rustc_session::Session; use rustc_span::symbol::Symbol; use rustc_target::spec::{MergeFunctions, PanicStrategy}; -use std::ffi::CString; +use std::ffi::{CStr, CString}; -use std::detect; use std::slice; use std::str; use std::sync::atomic::{AtomicBool, Ordering}; @@ -223,19 +222,20 @@ pub fn target_cpu(sess: &Session) -> &str { } pub fn handle_native_features(sess: &Session) -> Vec<String> { - const LLVM_NOT_RECOGNIZED: &[&str] = &["tsc"]; - match sess.opts.cg.target_cpu { Some(ref s) => { if s != "native" { return vec![]; } - detect::features() - .map(|(feature, support)| (to_llvm_feature(sess, feature), support)) - .filter(|(feature, _)| !LLVM_NOT_RECOGNIZED.contains(feature)) - .map(|(feature, support)| (if support { "+" } else { "-" }).to_owned() + feature) - .collect() + let ptr = unsafe { llvm::LLVMGetHostCPUFeatures() }; + let str = unsafe { CStr::from_ptr(ptr).to_string_lossy() }; + + let features = str.split(",").map(|s| s.to_owned()).collect(); + + unsafe { llvm::LLVMDisposeMessage(ptr) }; + + features } None => vec![], } |
