Move SanitizerSet to rustc_target
This commit is contained in:
parent
23fa536050
commit
64af7eae1e
14 changed files with 109 additions and 116 deletions
|
@ -11,9 +11,9 @@ use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
|
||||||
use rustc_middle::ty::layout::HasTyCtxt;
|
use rustc_middle::ty::layout::HasTyCtxt;
|
||||||
use rustc_middle::ty::query::Providers;
|
use rustc_middle::ty::query::Providers;
|
||||||
use rustc_middle::ty::{self, TyCtxt};
|
use rustc_middle::ty::{self, TyCtxt};
|
||||||
use rustc_session::config::{OptLevel, SanitizerSet};
|
use rustc_session::config::OptLevel;
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_target::spec::StackProbeType;
|
use rustc_target::spec::{SanitizerSet, StackProbeType};
|
||||||
|
|
||||||
use crate::attributes;
|
use crate::attributes;
|
||||||
use crate::llvm::AttributePlace::Function;
|
use crate::llvm::AttributePlace::Function;
|
||||||
|
|
|
@ -23,11 +23,11 @@ use rustc_fs_util::{link_or_copy, path_to_c_string};
|
||||||
use rustc_hir::def_id::LOCAL_CRATE;
|
use rustc_hir::def_id::LOCAL_CRATE;
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_session::config::{self, Lto, OutputType, Passes, SanitizerSet, SwitchWithOptPath};
|
use rustc_session::config::{self, Lto, OutputType, Passes, SwitchWithOptPath};
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::InnerSpan;
|
use rustc_span::InnerSpan;
|
||||||
use rustc_target::spec::{CodeModel, RelocModel, SplitDebuginfo};
|
use rustc_target::spec::{CodeModel, RelocModel, SanitizerSet, SplitDebuginfo};
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use libc::{c_char, c_int, c_uint, c_void, size_t};
|
use libc::{c_char, c_int, c_uint, c_void, size_t};
|
||||||
|
|
|
@ -32,8 +32,9 @@ use rustc_middle::middle::cstore::EncodedMetadata;
|
||||||
use rustc_middle::middle::exported_symbols;
|
use rustc_middle::middle::exported_symbols;
|
||||||
use rustc_middle::mir::mono::{Linkage, Visibility};
|
use rustc_middle::mir::mono::{Linkage, Visibility};
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_session::config::{DebugInfo, SanitizerSet};
|
use rustc_session::config::DebugInfo;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
|
use rustc_target::spec::SanitizerSet;
|
||||||
|
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
|
@ -6,7 +6,7 @@ use rustc_hir::def_id::CrateNum;
|
||||||
use rustc_middle::middle::cstore::{EncodedMetadata, LibSource};
|
use rustc_middle::middle::cstore::{EncodedMetadata, LibSource};
|
||||||
use rustc_middle::middle::dependency_format::Linkage;
|
use rustc_middle::middle::dependency_format::Linkage;
|
||||||
use rustc_session::config::{self, CFGuard, CrateType, DebugInfo};
|
use rustc_session::config::{self, CFGuard, CrateType, DebugInfo};
|
||||||
use rustc_session::config::{OutputFilenames, OutputType, PrintRequest, SanitizerSet};
|
use rustc_session::config::{OutputFilenames, OutputType, PrintRequest};
|
||||||
use rustc_session::output::{check_file_is_writeable, invalid_output_for_target, out_filename};
|
use rustc_session::output::{check_file_is_writeable, invalid_output_for_target, out_filename};
|
||||||
use rustc_session::search_paths::PathKind;
|
use rustc_session::search_paths::PathKind;
|
||||||
use rustc_session::utils::NativeLibKind;
|
use rustc_session::utils::NativeLibKind;
|
||||||
|
@ -16,7 +16,7 @@ use rustc_session::{filesearch, Session};
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
use rustc_target::spec::crt_objects::{CrtObjects, CrtObjectsFallback};
|
use rustc_target::spec::crt_objects::{CrtObjects, CrtObjectsFallback};
|
||||||
use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor, SplitDebuginfo};
|
use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor, SplitDebuginfo};
|
||||||
use rustc_target::spec::{PanicStrategy, RelocModel, RelroLevel, Target};
|
use rustc_target::spec::{PanicStrategy, RelocModel, RelroLevel, SanitizerSet, Target};
|
||||||
|
|
||||||
use super::archive::ArchiveBuilder;
|
use super::archive::ArchiveBuilder;
|
||||||
use super::command::Command;
|
use super::command::Command;
|
||||||
|
|
|
@ -15,7 +15,8 @@ use rustc_middle::ty::query::Providers;
|
||||||
use rustc_middle::ty::subst::{GenericArgKind, SubstsRef};
|
use rustc_middle::ty::subst::{GenericArgKind, SubstsRef};
|
||||||
use rustc_middle::ty::Instance;
|
use rustc_middle::ty::Instance;
|
||||||
use rustc_middle::ty::{SymbolName, TyCtxt};
|
use rustc_middle::ty::{SymbolName, TyCtxt};
|
||||||
use rustc_session::config::{CrateType, SanitizerSet};
|
use rustc_session::config::CrateType;
|
||||||
|
use rustc_target::spec::SanitizerSet;
|
||||||
|
|
||||||
pub fn threshold(tcx: TyCtxt<'_>) -> SymbolExportLevel {
|
pub fn threshold(tcx: TyCtxt<'_>) -> SymbolExportLevel {
|
||||||
crates_export_threshold(&tcx.sess.crate_types())
|
crates_export_threshold(&tcx.sess.crate_types())
|
||||||
|
|
|
@ -27,12 +27,12 @@ use rustc_middle::middle::exported_symbols::SymbolExportLevel;
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_session::cgu_reuse_tracker::CguReuseTracker;
|
use rustc_session::cgu_reuse_tracker::CguReuseTracker;
|
||||||
use rustc_session::config::{self, CrateType, Lto, OutputFilenames, OutputType};
|
use rustc_session::config::{self, CrateType, Lto, OutputFilenames, OutputType};
|
||||||
use rustc_session::config::{Passes, SanitizerSet, SwitchWithOptPath};
|
use rustc_session::config::{Passes, SwitchWithOptPath};
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_span::source_map::SourceMap;
|
use rustc_span::source_map::SourceMap;
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{sym, Symbol};
|
||||||
use rustc_span::{BytePos, FileName, InnerSpan, Pos, Span};
|
use rustc_span::{BytePos, FileName, InnerSpan, Pos, Span};
|
||||||
use rustc_target::spec::{MergeFunctions, PanicStrategy};
|
use rustc_target::spec::{MergeFunctions, PanicStrategy, SanitizerSet};
|
||||||
|
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
|
@ -8,7 +8,7 @@ use rustc_session::config::{build_configuration, build_session_options, to_crate
|
||||||
use rustc_session::config::{rustc_optgroups, ErrorOutputType, ExternLocation, Options, Passes};
|
use rustc_session::config::{rustc_optgroups, ErrorOutputType, ExternLocation, Options, Passes};
|
||||||
use rustc_session::config::{CFGuard, ExternEntry, LinkerPluginLto, LtoCli, SwitchWithOptPath};
|
use rustc_session::config::{CFGuard, ExternEntry, LinkerPluginLto, LtoCli, SwitchWithOptPath};
|
||||||
use rustc_session::config::{
|
use rustc_session::config::{
|
||||||
Externs, OutputType, OutputTypes, SanitizerSet, SymbolManglingVersion, WasiExecModel,
|
Externs, OutputType, OutputTypes, SymbolManglingVersion, WasiExecModel,
|
||||||
};
|
};
|
||||||
use rustc_session::lint::Level;
|
use rustc_session::lint::Level;
|
||||||
use rustc_session::search_paths::SearchPath;
|
use rustc_session::search_paths::SearchPath;
|
||||||
|
@ -18,7 +18,7 @@ use rustc_span::edition::{Edition, DEFAULT_EDITION};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::SourceFileHashAlgorithm;
|
use rustc_span::SourceFileHashAlgorithm;
|
||||||
use rustc_target::spec::{CodeModel, LinkerFlavor, MergeFunctions, PanicStrategy};
|
use rustc_target::spec::{CodeModel, LinkerFlavor, MergeFunctions, PanicStrategy};
|
||||||
use rustc_target::spec::{RelocModel, RelroLevel, SplitDebuginfo, TlsModel};
|
use rustc_target::spec::{RelocModel, RelroLevel, SanitizerSet, SplitDebuginfo, TlsModel};
|
||||||
use std::collections::{BTreeMap, BTreeSet};
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
use std::iter::FromIterator;
|
use std::iter::FromIterator;
|
||||||
use std::num::NonZeroUsize;
|
use std::num::NonZeroUsize;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::mir::mono::Linkage;
|
use crate::mir::mono::Linkage;
|
||||||
use rustc_attr::{InlineAttr, InstructionSetAttr, OptimizeAttr};
|
use rustc_attr::{InlineAttr, InstructionSetAttr, OptimizeAttr};
|
||||||
use rustc_session::config::SanitizerSet;
|
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
|
use rustc_target::spec::SanitizerSet;
|
||||||
|
|
||||||
#[derive(Clone, TyEncodable, TyDecodable, HashStable, Debug)]
|
#[derive(Clone, TyEncodable, TyDecodable, HashStable, Debug)]
|
||||||
pub struct CodegenFnAttrs {
|
pub struct CodegenFnAttrs {
|
||||||
|
|
|
@ -10,7 +10,6 @@ use crate::{early_error, early_warn, Session};
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_data_structures::impl_stable_hash_via_hash;
|
use rustc_data_structures::impl_stable_hash_via_hash;
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
|
||||||
|
|
||||||
use rustc_target::abi::{Align, TargetDataLayout};
|
use rustc_target::abi::{Align, TargetDataLayout};
|
||||||
use rustc_target::spec::{SplitDebuginfo, Target, TargetTriple};
|
use rustc_target::spec::{SplitDebuginfo, Target, TargetTriple};
|
||||||
|
@ -36,66 +35,6 @@ use std::iter::{self, FromIterator};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::str::{self, FromStr};
|
use std::str::{self, FromStr};
|
||||||
|
|
||||||
bitflags! {
|
|
||||||
#[derive(Default, Encodable, Decodable)]
|
|
||||||
pub struct SanitizerSet: u8 {
|
|
||||||
const ADDRESS = 1 << 0;
|
|
||||||
const LEAK = 1 << 1;
|
|
||||||
const MEMORY = 1 << 2;
|
|
||||||
const THREAD = 1 << 3;
|
|
||||||
const HWADDRESS = 1 << 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Formats a sanitizer set as a comma separated list of sanitizers' names.
|
|
||||||
impl fmt::Display for SanitizerSet {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
||||||
let mut first = true;
|
|
||||||
for s in *self {
|
|
||||||
let name = match s {
|
|
||||||
SanitizerSet::ADDRESS => "address",
|
|
||||||
SanitizerSet::LEAK => "leak",
|
|
||||||
SanitizerSet::MEMORY => "memory",
|
|
||||||
SanitizerSet::THREAD => "thread",
|
|
||||||
SanitizerSet::HWADDRESS => "hwaddress",
|
|
||||||
_ => panic!("unrecognized sanitizer {:?}", s),
|
|
||||||
};
|
|
||||||
if !first {
|
|
||||||
f.write_str(",")?;
|
|
||||||
}
|
|
||||||
f.write_str(name)?;
|
|
||||||
first = false;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoIterator for SanitizerSet {
|
|
||||||
type Item = SanitizerSet;
|
|
||||||
type IntoIter = std::vec::IntoIter<SanitizerSet>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
[
|
|
||||||
SanitizerSet::ADDRESS,
|
|
||||||
SanitizerSet::LEAK,
|
|
||||||
SanitizerSet::MEMORY,
|
|
||||||
SanitizerSet::THREAD,
|
|
||||||
SanitizerSet::HWADDRESS,
|
|
||||||
]
|
|
||||||
.iter()
|
|
||||||
.copied()
|
|
||||||
.filter(|&s| self.contains(s))
|
|
||||||
.collect::<Vec<_>>()
|
|
||||||
.into_iter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<CTX> HashStable<CTX> for SanitizerSet {
|
|
||||||
fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher) {
|
|
||||||
self.bits().hash_stable(ctx, hasher);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The different settings that the `-Z strip` flag can have.
|
/// The different settings that the `-Z strip` flag can have.
|
||||||
#[derive(Clone, Copy, PartialEq, Hash, Debug)]
|
#[derive(Clone, Copy, PartialEq, Hash, Debug)]
|
||||||
pub enum Strip {
|
pub enum Strip {
|
||||||
|
@ -2308,8 +2247,8 @@ impl PpMode {
|
||||||
crate mod dep_tracking {
|
crate mod dep_tracking {
|
||||||
use super::{
|
use super::{
|
||||||
CFGuard, CrateType, DebugInfo, ErrorOutputType, InstrumentCoverage, LinkerPluginLto,
|
CFGuard, CrateType, DebugInfo, ErrorOutputType, InstrumentCoverage, LinkerPluginLto,
|
||||||
LtoCli, OptLevel, OutputTypes, Passes, SanitizerSet, SourceFileHashAlgorithm,
|
LtoCli, OptLevel, OutputTypes, Passes, SourceFileHashAlgorithm, SwitchWithOptPath,
|
||||||
SwitchWithOptPath, SymbolManglingVersion, TrimmedDefPaths,
|
SymbolManglingVersion, TrimmedDefPaths,
|
||||||
};
|
};
|
||||||
use crate::lint;
|
use crate::lint;
|
||||||
use crate::options::WasiExecModel;
|
use crate::options::WasiExecModel;
|
||||||
|
@ -2317,7 +2256,7 @@ crate mod dep_tracking {
|
||||||
use rustc_feature::UnstableFeatures;
|
use rustc_feature::UnstableFeatures;
|
||||||
use rustc_span::edition::Edition;
|
use rustc_span::edition::Edition;
|
||||||
use rustc_target::spec::{CodeModel, MergeFunctions, PanicStrategy, RelocModel};
|
use rustc_target::spec::{CodeModel, MergeFunctions, PanicStrategy, RelocModel};
|
||||||
use rustc_target::spec::{RelroLevel, SplitDebuginfo, TargetTriple, TlsModel};
|
use rustc_target::spec::{RelroLevel, SanitizerSet, SplitDebuginfo, TargetTriple, TlsModel};
|
||||||
use std::collections::hash_map::DefaultHasher;
|
use std::collections::hash_map::DefaultHasher;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
#![cfg_attr(bootstrap, feature(or_patterns))]
|
#![cfg_attr(bootstrap, feature(or_patterns))]
|
||||||
#![recursion_limit = "256"]
|
#![recursion_limit = "256"]
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate bitflags;
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rustc_macros;
|
extern crate rustc_macros;
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ use crate::lint;
|
||||||
use crate::search_paths::SearchPath;
|
use crate::search_paths::SearchPath;
|
||||||
use crate::utils::NativeLibKind;
|
use crate::utils::NativeLibKind;
|
||||||
|
|
||||||
use rustc_target::spec::{CodeModel, LinkerFlavor, MergeFunctions, PanicStrategy};
|
use rustc_target::spec::{CodeModel, LinkerFlavor, MergeFunctions, PanicStrategy, SanitizerSet};
|
||||||
use rustc_target::spec::{RelocModel, RelroLevel, SplitDebuginfo, TargetTriple, TlsModel};
|
use rustc_target::spec::{RelocModel, RelroLevel, SplitDebuginfo, TargetTriple, TlsModel};
|
||||||
|
|
||||||
use rustc_feature::UnstableFeatures;
|
use rustc_feature::UnstableFeatures;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::cgu_reuse_tracker::CguReuseTracker;
|
use crate::cgu_reuse_tracker::CguReuseTracker;
|
||||||
use crate::code_stats::CodeStats;
|
use crate::code_stats::CodeStats;
|
||||||
pub use crate::code_stats::{DataTypeKind, FieldInfo, SizeKind, VariantInfo};
|
pub use crate::code_stats::{DataTypeKind, FieldInfo, SizeKind, VariantInfo};
|
||||||
use crate::config::{self, CrateType, OutputType, PrintRequest, SanitizerSet, SwitchWithOptPath};
|
use crate::config::{self, CrateType, OutputType, PrintRequest, SwitchWithOptPath};
|
||||||
use crate::filesearch;
|
use crate::filesearch;
|
||||||
use crate::lint::{self, LintId};
|
use crate::lint::{self, LintId};
|
||||||
use crate::parse::ParseSess;
|
use crate::parse::ParseSess;
|
||||||
|
@ -28,7 +28,7 @@ use rustc_span::source_map::{FileLoader, MultiSpan, RealFileLoader, SourceMap, S
|
||||||
use rustc_span::{sym, SourceFileHashAlgorithm, Symbol};
|
use rustc_span::{sym, SourceFileHashAlgorithm, Symbol};
|
||||||
use rustc_target::asm::InlineAsmArch;
|
use rustc_target::asm::InlineAsmArch;
|
||||||
use rustc_target::spec::{CodeModel, PanicStrategy, RelocModel, RelroLevel};
|
use rustc_target::spec::{CodeModel, PanicStrategy, RelocModel, RelroLevel};
|
||||||
use rustc_target::spec::{SplitDebuginfo, Target, TargetTriple, TlsModel};
|
use rustc_target::spec::{SanitizerSet, SplitDebuginfo, Target, TargetTriple, TlsModel};
|
||||||
|
|
||||||
use std::cell::{self, RefCell};
|
use std::cell::{self, RefCell};
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
use crate::abi::Endian;
|
use crate::abi::Endian;
|
||||||
use crate::spec::abi::{lookup as lookup_abi, Abi};
|
use crate::spec::abi::{lookup as lookup_abi, Abi};
|
||||||
use crate::spec::crt_objects::{CrtObjects, CrtObjectsFallback};
|
use crate::spec::crt_objects::{CrtObjects, CrtObjectsFallback};
|
||||||
|
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||||
use rustc_serialize::json::{Json, ToJson};
|
use rustc_serialize::json::{Json, ToJson};
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{sym, Symbol};
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
@ -511,38 +512,6 @@ impl fmt::Display for SplitDebuginfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! supported_targets {
|
|
||||||
( $(($( $triple:literal, )+ $module:ident ),)+ ) => {
|
|
||||||
$(mod $module;)+
|
|
||||||
|
|
||||||
/// List of supported targets
|
|
||||||
pub const TARGETS: &[&str] = &[$($($triple),+),+];
|
|
||||||
|
|
||||||
fn load_builtin(target: &str) -> Option<Target> {
|
|
||||||
let mut t = match target {
|
|
||||||
$( $($triple)|+ => $module::target(), )+
|
|
||||||
_ => return None,
|
|
||||||
};
|
|
||||||
t.is_builtin = true;
|
|
||||||
debug!("got builtin target: {:?}", t);
|
|
||||||
Some(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
mod tests_impl;
|
|
||||||
|
|
||||||
// Cannot put this into a separate file without duplication, make an exception.
|
|
||||||
$(
|
|
||||||
#[test] // `#[test]`
|
|
||||||
fn $module() {
|
|
||||||
tests_impl::test_target(super::$module::target());
|
|
||||||
}
|
|
||||||
)+
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum StackProbeType {
|
pub enum StackProbeType {
|
||||||
/// Don't emit any stack probes.
|
/// Don't emit any stack probes.
|
||||||
|
@ -620,6 +589,92 @@ impl ToJson for StackProbeType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bitflags::bitflags! {
|
||||||
|
#[derive(Default, Encodable, Decodable)]
|
||||||
|
pub struct SanitizerSet: u8 {
|
||||||
|
const ADDRESS = 1 << 0;
|
||||||
|
const LEAK = 1 << 1;
|
||||||
|
const MEMORY = 1 << 2;
|
||||||
|
const THREAD = 1 << 3;
|
||||||
|
const HWADDRESS = 1 << 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Formats a sanitizer set as a comma separated list of sanitizers' names.
|
||||||
|
impl fmt::Display for SanitizerSet {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let mut first = true;
|
||||||
|
for s in *self {
|
||||||
|
let name = match s {
|
||||||
|
SanitizerSet::ADDRESS => "address",
|
||||||
|
SanitizerSet::LEAK => "leak",
|
||||||
|
SanitizerSet::MEMORY => "memory",
|
||||||
|
SanitizerSet::THREAD => "thread",
|
||||||
|
SanitizerSet::HWADDRESS => "hwaddress",
|
||||||
|
_ => panic!("unrecognized sanitizer {:?}", s),
|
||||||
|
};
|
||||||
|
if !first {
|
||||||
|
f.write_str(",")?;
|
||||||
|
}
|
||||||
|
f.write_str(name)?;
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoIterator for SanitizerSet {
|
||||||
|
type Item = SanitizerSet;
|
||||||
|
type IntoIter = std::vec::IntoIter<SanitizerSet>;
|
||||||
|
|
||||||
|
fn into_iter(self) -> Self::IntoIter {
|
||||||
|
[SanitizerSet::ADDRESS, SanitizerSet::LEAK, SanitizerSet::MEMORY, SanitizerSet::THREAD, SanitizerSet::HWADDRESS]
|
||||||
|
.iter()
|
||||||
|
.copied()
|
||||||
|
.filter(|&s| self.contains(s))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.into_iter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<CTX> HashStable<CTX> for SanitizerSet {
|
||||||
|
fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher) {
|
||||||
|
self.bits().hash_stable(ctx, hasher);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! supported_targets {
|
||||||
|
( $(($( $triple:literal, )+ $module:ident ),)+ ) => {
|
||||||
|
$(mod $module;)+
|
||||||
|
|
||||||
|
/// List of supported targets
|
||||||
|
pub const TARGETS: &[&str] = &[$($($triple),+),+];
|
||||||
|
|
||||||
|
fn load_builtin(target: &str) -> Option<Target> {
|
||||||
|
let mut t = match target {
|
||||||
|
$( $($triple)|+ => $module::target(), )+
|
||||||
|
_ => return None,
|
||||||
|
};
|
||||||
|
t.is_builtin = true;
|
||||||
|
debug!("got builtin target: {:?}", t);
|
||||||
|
Some(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
mod tests_impl;
|
||||||
|
|
||||||
|
// Cannot put this into a separate file without duplication, make an exception.
|
||||||
|
$(
|
||||||
|
#[test] // `#[test]`
|
||||||
|
fn $module() {
|
||||||
|
tests_impl::test_target(super::$module::target());
|
||||||
|
}
|
||||||
|
)+
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
supported_targets! {
|
supported_targets! {
|
||||||
("x86_64-unknown-linux-gnu", x86_64_unknown_linux_gnu),
|
("x86_64-unknown-linux-gnu", x86_64_unknown_linux_gnu),
|
||||||
("x86_64-unknown-linux-gnux32", x86_64_unknown_linux_gnux32),
|
("x86_64-unknown-linux-gnux32", x86_64_unknown_linux_gnux32),
|
||||||
|
|
|
@ -43,12 +43,11 @@ use rustc_middle::ty::util::Discr;
|
||||||
use rustc_middle::ty::util::IntTypeExt;
|
use rustc_middle::ty::util::IntTypeExt;
|
||||||
use rustc_middle::ty::{self, AdtKind, Const, DefIdTree, ToPolyTraitRef, Ty, TyCtxt};
|
use rustc_middle::ty::{self, AdtKind, Const, DefIdTree, ToPolyTraitRef, Ty, TyCtxt};
|
||||||
use rustc_middle::ty::{ReprOptions, ToPredicate, WithConstness};
|
use rustc_middle::ty::{ReprOptions, ToPredicate, WithConstness};
|
||||||
use rustc_session::config::SanitizerSet;
|
|
||||||
use rustc_session::lint;
|
use rustc_session::lint;
|
||||||
use rustc_session::parse::feature_err;
|
use rustc_session::parse::feature_err;
|
||||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||||
use rustc_span::{Span, DUMMY_SP};
|
use rustc_span::{Span, DUMMY_SP};
|
||||||
use rustc_target::spec::abi;
|
use rustc_target::spec::{abi, SanitizerSet};
|
||||||
use rustc_trait_selection::traits::error_reporting::suggestions::NextTypeParamName;
|
use rustc_trait_selection::traits::error_reporting::suggestions::NextTypeParamName;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue