Pass a Symbol to check_name, emit_feature_err, and related functions.
This commit is contained in:
parent
79602c87b5
commit
fb084a48e2
114 changed files with 671 additions and 621 deletions
|
|
@ -321,12 +321,12 @@ pub fn provide(providers: &mut Providers<'_>) {
|
|||
// rustdoc needs to be able to document functions that use all the features, so
|
||||
// whitelist them all
|
||||
Lrc::new(llvm_util::all_known_features()
|
||||
.map(|(a, b)| (a.to_string(), b.map(|s| s.to_string())))
|
||||
.map(|(a, b)| (a.to_string(), b))
|
||||
.collect())
|
||||
} else {
|
||||
Lrc::new(llvm_util::target_feature_whitelist(tcx.sess)
|
||||
.iter()
|
||||
.map(|&(a, b)| (a.to_string(), b.map(|s| s.to_string())))
|
||||
.map(|&(a, b)| (a.to_string(), b))
|
||||
.collect())
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ use rustc::mir::interpret::{ConstValue, Allocation, read_target_uint,
|
|||
use rustc::hir::Node;
|
||||
use syntax_pos::Span;
|
||||
use rustc_target::abi::HasDataLayout;
|
||||
use syntax::symbol::sym;
|
||||
use syntax_pos::symbol::LocalInternedString;
|
||||
use rustc::ty::{self, Ty};
|
||||
use rustc_codegen_ssa::traits::*;
|
||||
|
|
@ -248,7 +249,7 @@ impl CodegenCx<'ll, 'tcx> {
|
|||
debug!("get_static: sym={} attrs={:?}", sym, attrs);
|
||||
|
||||
for attr in attrs {
|
||||
if attr.check_name("thread_local") {
|
||||
if attr.check_name(sym::thread_local) {
|
||||
llvm::set_thread_local_mode(g, self.tls_model);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ use rustc::session::config::DebugInfo;
|
|||
use rustc_codegen_ssa::traits::*;
|
||||
|
||||
use syntax::attr;
|
||||
use syntax::symbol::sym;
|
||||
|
||||
|
||||
/// Inserts a side-effect free instruction sequence that makes sure that the
|
||||
|
|
@ -66,8 +67,7 @@ pub fn get_or_insert_gdb_debug_scripts_section_global(cx: &CodegenCx<'ll, '_>)
|
|||
|
||||
pub fn needs_gdb_debug_scripts_section(cx: &CodegenCx<'_, '_>) -> bool {
|
||||
let omit_gdb_pretty_printer_section =
|
||||
attr::contains_name(&cx.tcx.hir().krate_attrs(),
|
||||
"omit_gdb_pretty_printer_section");
|
||||
attr::contains_name(&cx.tcx.hir().krate_attrs(), sym::omit_gdb_pretty_printer_section);
|
||||
|
||||
!omit_gdb_pretty_printer_section &&
|
||||
cx.sess().opts.debuginfo != DebugInfo::None &&
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ use rustc_target::spec::MergeFunctions;
|
|||
use libc::c_int;
|
||||
use std::ffi::CString;
|
||||
use syntax::feature_gate::UnstableFeatures;
|
||||
use syntax::symbol::sym;
|
||||
|
||||
use std::str;
|
||||
use std::slice;
|
||||
|
|
@ -93,106 +94,106 @@ unsafe fn configure_llvm(sess: &Session) {
|
|||
// to LLVM or the feature detection code will walk past the end of the feature
|
||||
// array, leading to crashes.
|
||||
|
||||
const ARM_WHITELIST: &[(&str, Option<&str>)] = &[
|
||||
("aclass", Some("arm_target_feature")),
|
||||
("mclass", Some("arm_target_feature")),
|
||||
("rclass", Some("arm_target_feature")),
|
||||
("dsp", Some("arm_target_feature")),
|
||||
("neon", Some("arm_target_feature")),
|
||||
("v5te", Some("arm_target_feature")),
|
||||
("v6", Some("arm_target_feature")),
|
||||
("v6k", Some("arm_target_feature")),
|
||||
("v6t2", Some("arm_target_feature")),
|
||||
("v7", Some("arm_target_feature")),
|
||||
("v8", Some("arm_target_feature")),
|
||||
("vfp2", Some("arm_target_feature")),
|
||||
("vfp3", Some("arm_target_feature")),
|
||||
("vfp4", Some("arm_target_feature")),
|
||||
const ARM_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("aclass", Some(sym::arm_target_feature)),
|
||||
("mclass", Some(sym::arm_target_feature)),
|
||||
("rclass", Some(sym::arm_target_feature)),
|
||||
("dsp", Some(sym::arm_target_feature)),
|
||||
("neon", Some(sym::arm_target_feature)),
|
||||
("v5te", Some(sym::arm_target_feature)),
|
||||
("v6", Some(sym::arm_target_feature)),
|
||||
("v6k", Some(sym::arm_target_feature)),
|
||||
("v6t2", Some(sym::arm_target_feature)),
|
||||
("v7", Some(sym::arm_target_feature)),
|
||||
("v8", Some(sym::arm_target_feature)),
|
||||
("vfp2", Some(sym::arm_target_feature)),
|
||||
("vfp3", Some(sym::arm_target_feature)),
|
||||
("vfp4", Some(sym::arm_target_feature)),
|
||||
];
|
||||
|
||||
const AARCH64_WHITELIST: &[(&str, Option<&str>)] = &[
|
||||
("fp", Some("aarch64_target_feature")),
|
||||
("neon", Some("aarch64_target_feature")),
|
||||
("sve", Some("aarch64_target_feature")),
|
||||
("crc", Some("aarch64_target_feature")),
|
||||
("crypto", Some("aarch64_target_feature")),
|
||||
("ras", Some("aarch64_target_feature")),
|
||||
("lse", Some("aarch64_target_feature")),
|
||||
("rdm", Some("aarch64_target_feature")),
|
||||
("fp16", Some("aarch64_target_feature")),
|
||||
("rcpc", Some("aarch64_target_feature")),
|
||||
("dotprod", Some("aarch64_target_feature")),
|
||||
("v8.1a", Some("aarch64_target_feature")),
|
||||
("v8.2a", Some("aarch64_target_feature")),
|
||||
("v8.3a", Some("aarch64_target_feature")),
|
||||
const AARCH64_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("fp", Some(sym::aarch64_target_feature)),
|
||||
("neon", Some(sym::aarch64_target_feature)),
|
||||
("sve", Some(sym::aarch64_target_feature)),
|
||||
("crc", Some(sym::aarch64_target_feature)),
|
||||
("crypto", Some(sym::aarch64_target_feature)),
|
||||
("ras", Some(sym::aarch64_target_feature)),
|
||||
("lse", Some(sym::aarch64_target_feature)),
|
||||
("rdm", Some(sym::aarch64_target_feature)),
|
||||
("fp16", Some(sym::aarch64_target_feature)),
|
||||
("rcpc", Some(sym::aarch64_target_feature)),
|
||||
("dotprod", Some(sym::aarch64_target_feature)),
|
||||
("v8.1a", Some(sym::aarch64_target_feature)),
|
||||
("v8.2a", Some(sym::aarch64_target_feature)),
|
||||
("v8.3a", Some(sym::aarch64_target_feature)),
|
||||
];
|
||||
|
||||
const X86_WHITELIST: &[(&str, Option<&str>)] = &[
|
||||
("adx", Some("adx_target_feature")),
|
||||
const X86_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("adx", Some(sym::adx_target_feature)),
|
||||
("aes", None),
|
||||
("avx", None),
|
||||
("avx2", None),
|
||||
("avx512bw", Some("avx512_target_feature")),
|
||||
("avx512cd", Some("avx512_target_feature")),
|
||||
("avx512dq", Some("avx512_target_feature")),
|
||||
("avx512er", Some("avx512_target_feature")),
|
||||
("avx512f", Some("avx512_target_feature")),
|
||||
("avx512ifma", Some("avx512_target_feature")),
|
||||
("avx512pf", Some("avx512_target_feature")),
|
||||
("avx512vbmi", Some("avx512_target_feature")),
|
||||
("avx512vl", Some("avx512_target_feature")),
|
||||
("avx512vpopcntdq", Some("avx512_target_feature")),
|
||||
("avx512bw", Some(sym::avx512_target_feature)),
|
||||
("avx512cd", Some(sym::avx512_target_feature)),
|
||||
("avx512dq", Some(sym::avx512_target_feature)),
|
||||
("avx512er", Some(sym::avx512_target_feature)),
|
||||
("avx512f", Some(sym::avx512_target_feature)),
|
||||
("avx512ifma", Some(sym::avx512_target_feature)),
|
||||
("avx512pf", Some(sym::avx512_target_feature)),
|
||||
("avx512vbmi", Some(sym::avx512_target_feature)),
|
||||
("avx512vl", Some(sym::avx512_target_feature)),
|
||||
("avx512vpopcntdq", Some(sym::avx512_target_feature)),
|
||||
("bmi1", None),
|
||||
("bmi2", None),
|
||||
("cmpxchg16b", Some("cmpxchg16b_target_feature")),
|
||||
("f16c", Some("f16c_target_feature")),
|
||||
("cmpxchg16b", Some(sym::cmpxchg16b_target_feature)),
|
||||
("f16c", Some(sym::f16c_target_feature)),
|
||||
("fma", None),
|
||||
("fxsr", None),
|
||||
("lzcnt", None),
|
||||
("mmx", Some("mmx_target_feature")),
|
||||
("movbe", Some("movbe_target_feature")),
|
||||
("mmx", Some(sym::mmx_target_feature)),
|
||||
("movbe", Some(sym::movbe_target_feature)),
|
||||
("pclmulqdq", None),
|
||||
("popcnt", None),
|
||||
("rdrand", None),
|
||||
("rdseed", None),
|
||||
("rtm", Some("rtm_target_feature")),
|
||||
("rtm", Some(sym::rtm_target_feature)),
|
||||
("sha", None),
|
||||
("sse", None),
|
||||
("sse2", None),
|
||||
("sse3", None),
|
||||
("sse4.1", None),
|
||||
("sse4.2", None),
|
||||
("sse4a", Some("sse4a_target_feature")),
|
||||
("sse4a", Some(sym::sse4a_target_feature)),
|
||||
("ssse3", None),
|
||||
("tbm", Some("tbm_target_feature")),
|
||||
("tbm", Some(sym::tbm_target_feature)),
|
||||
("xsave", None),
|
||||
("xsavec", None),
|
||||
("xsaveopt", None),
|
||||
("xsaves", None),
|
||||
];
|
||||
|
||||
const HEXAGON_WHITELIST: &[(&str, Option<&str>)] = &[
|
||||
("hvx", Some("hexagon_target_feature")),
|
||||
("hvx-double", Some("hexagon_target_feature")),
|
||||
const HEXAGON_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("hvx", Some(sym::hexagon_target_feature)),
|
||||
("hvx-double", Some(sym::hexagon_target_feature)),
|
||||
];
|
||||
|
||||
const POWERPC_WHITELIST: &[(&str, Option<&str>)] = &[
|
||||
("altivec", Some("powerpc_target_feature")),
|
||||
("power8-altivec", Some("powerpc_target_feature")),
|
||||
("power9-altivec", Some("powerpc_target_feature")),
|
||||
("power8-vector", Some("powerpc_target_feature")),
|
||||
("power9-vector", Some("powerpc_target_feature")),
|
||||
("vsx", Some("powerpc_target_feature")),
|
||||
const POWERPC_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("altivec", Some(sym::powerpc_target_feature)),
|
||||
("power8-altivec", Some(sym::powerpc_target_feature)),
|
||||
("power9-altivec", Some(sym::powerpc_target_feature)),
|
||||
("power8-vector", Some(sym::powerpc_target_feature)),
|
||||
("power9-vector", Some(sym::powerpc_target_feature)),
|
||||
("vsx", Some(sym::powerpc_target_feature)),
|
||||
];
|
||||
|
||||
const MIPS_WHITELIST: &[(&str, Option<&str>)] = &[
|
||||
("fp64", Some("mips_target_feature")),
|
||||
("msa", Some("mips_target_feature")),
|
||||
const MIPS_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("fp64", Some(sym::mips_target_feature)),
|
||||
("msa", Some(sym::mips_target_feature)),
|
||||
];
|
||||
|
||||
const WASM_WHITELIST: &[(&str, Option<&str>)] = &[
|
||||
("simd128", Some("wasm_target_feature")),
|
||||
("atomics", Some("wasm_target_feature")),
|
||||
const WASM_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("simd128", Some(sym::wasm_target_feature)),
|
||||
("atomics", Some(sym::wasm_target_feature)),
|
||||
];
|
||||
|
||||
/// When rustdoc is running, provide a list of all known features so that all their respective
|
||||
|
|
@ -200,7 +201,7 @@ const WASM_WHITELIST: &[(&str, Option<&str>)] = &[
|
|||
///
|
||||
/// IMPORTANT: If you're adding another whitelist to the above lists, make sure to add it to this
|
||||
/// iterator!
|
||||
pub fn all_known_features() -> impl Iterator<Item=(&'static str, Option<&'static str>)> {
|
||||
pub fn all_known_features() -> impl Iterator<Item=(&'static str, Option<Symbol>)> {
|
||||
ARM_WHITELIST.iter().cloned()
|
||||
.chain(AARCH64_WHITELIST.iter().cloned())
|
||||
.chain(X86_WHITELIST.iter().cloned())
|
||||
|
|
@ -247,7 +248,7 @@ pub fn target_features(sess: &Session) -> Vec<Symbol> {
|
|||
}
|
||||
|
||||
pub fn target_feature_whitelist(sess: &Session)
|
||||
-> &'static [(&'static str, Option<&'static str>)]
|
||||
-> &'static [(&'static str, Option<Symbol>)]
|
||||
{
|
||||
match &*sess.target.target.arch {
|
||||
"arm" => ARM_WHITELIST,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue