mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Auto merge of #99058 - michaelwoerister:remove-stable-set-and-map, r=nagisa
Remove the unused StableSet and StableMap types from rustc_data_structures.
The current implementation is not "stable" in the same sense that `HashStable` and `StableHasher` are stable, i.e. across compilation sessions. So, in my opinion, it's better to remove those types (which are basically unused anyway) than to give the wrong impression that these are safe for incr. comp.
I plan to provide new "stable" collection types soon that can be used to replace `FxHashMap` and `FxHashSet` in query results (see [draft](69d03ac7a7
)). It's unsound that `HashMap` and `HashSet` implement `HashStable` (see https://github.com/rust-lang/rust/issues/98890 for a recent P-critical bug caused by this) -- so we should make some progress there.
This commit is contained in:
commit
be9cfb307e
@ -4,8 +4,7 @@ use super::LoweringContext;
|
||||
|
||||
use rustc_ast::ptr::P;
|
||||
use rustc_ast::*;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_errors::struct_span_err;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
|
@ -1,6 +1,6 @@
|
||||
//! Error reporting machinery for lifetime errors.
|
||||
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_errors::{Applicability, Diagnostic, DiagnosticBuilder, ErrorGuaranteed, MultiSpan};
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::intravisit::Visitor;
|
||||
|
@ -1,6 +1,6 @@
|
||||
use gccjit::{ToLValue, ToRValue, Type};
|
||||
use rustc_codegen_ssa::traits::{AbiBuilderMethods, BaseTypeMethods};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_middle::bug;
|
||||
use rustc_middle::ty::Ty;
|
||||
use rustc_target::abi::call::{CastTarget, FnAbi, PassMode, Reg, RegKind};
|
||||
|
@ -30,7 +30,7 @@ use rustc_codegen_ssa::traits::{
|
||||
OverflowOp,
|
||||
StaticBuilderMethods,
|
||||
};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_middle::ty::{ParamEnv, Ty, TyCtxt};
|
||||
use rustc_middle::ty::layout::{FnAbiError, FnAbiOfHelpers, FnAbiRequest, HasParamEnv, HasTyCtxt, LayoutError, LayoutOfHelpers, TyAndLayout};
|
||||
use rustc_span::Span;
|
||||
|
@ -61,12 +61,10 @@ pub mod sip128;
|
||||
pub mod small_c_str;
|
||||
pub mod small_str;
|
||||
pub mod snapshot_map;
|
||||
pub mod stable_map;
|
||||
pub mod svh;
|
||||
pub use ena::snapshot_vec;
|
||||
pub mod memmap;
|
||||
pub mod sorted_map;
|
||||
pub mod stable_set;
|
||||
#[macro_use]
|
||||
pub mod stable_hasher;
|
||||
mod atomic_ref;
|
||||
|
@ -1,100 +0,0 @@
|
||||
pub use rustc_hash::FxHashMap;
|
||||
use std::borrow::Borrow;
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::fmt;
|
||||
use std::hash::Hash;
|
||||
|
||||
/// A deterministic wrapper around FxHashMap that does not provide iteration support.
|
||||
///
|
||||
/// It supports insert, remove, get and get_mut functions from FxHashMap.
|
||||
/// It also allows to convert hashmap to a sorted vector with the method `into_sorted_vector()`.
|
||||
#[derive(Clone)]
|
||||
pub struct StableMap<K, V> {
|
||||
base: FxHashMap<K, V>,
|
||||
}
|
||||
|
||||
impl<K, V> Default for StableMap<K, V>
|
||||
where
|
||||
K: Eq + Hash,
|
||||
{
|
||||
fn default() -> StableMap<K, V> {
|
||||
StableMap::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl<K, V> fmt::Debug for StableMap<K, V>
|
||||
where
|
||||
K: Eq + Hash + fmt::Debug,
|
||||
V: fmt::Debug,
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{:?}", self.base)
|
||||
}
|
||||
}
|
||||
|
||||
impl<K, V> PartialEq for StableMap<K, V>
|
||||
where
|
||||
K: Eq + Hash,
|
||||
V: PartialEq,
|
||||
{
|
||||
fn eq(&self, other: &StableMap<K, V>) -> bool {
|
||||
self.base == other.base
|
||||
}
|
||||
}
|
||||
|
||||
impl<K, V> Eq for StableMap<K, V>
|
||||
where
|
||||
K: Eq + Hash,
|
||||
V: Eq,
|
||||
{
|
||||
}
|
||||
|
||||
impl<K, V> StableMap<K, V>
|
||||
where
|
||||
K: Eq + Hash,
|
||||
{
|
||||
pub fn new() -> StableMap<K, V> {
|
||||
StableMap { base: FxHashMap::default() }
|
||||
}
|
||||
|
||||
pub fn into_sorted_vector(self) -> Vec<(K, V)>
|
||||
where
|
||||
K: Ord + Copy,
|
||||
{
|
||||
let mut vector = self.base.into_iter().collect::<Vec<_>>();
|
||||
vector.sort_unstable_by_key(|pair| pair.0);
|
||||
vector
|
||||
}
|
||||
|
||||
pub fn entry(&mut self, k: K) -> Entry<'_, K, V> {
|
||||
self.base.entry(k)
|
||||
}
|
||||
|
||||
pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V>
|
||||
where
|
||||
K: Borrow<Q>,
|
||||
Q: Hash + Eq,
|
||||
{
|
||||
self.base.get(k)
|
||||
}
|
||||
|
||||
pub fn get_mut<Q: ?Sized>(&mut self, k: &Q) -> Option<&mut V>
|
||||
where
|
||||
K: Borrow<Q>,
|
||||
Q: Hash + Eq,
|
||||
{
|
||||
self.base.get_mut(k)
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, k: K, v: V) -> Option<V> {
|
||||
self.base.insert(k, v)
|
||||
}
|
||||
|
||||
pub fn remove<Q: ?Sized>(&mut self, k: &Q) -> Option<V>
|
||||
where
|
||||
K: Borrow<Q>,
|
||||
Q: Hash + Eq,
|
||||
{
|
||||
self.base.remove(k)
|
||||
}
|
||||
}
|
@ -1,77 +0,0 @@
|
||||
pub use rustc_hash::FxHashSet;
|
||||
use std::borrow::Borrow;
|
||||
use std::fmt;
|
||||
use std::hash::Hash;
|
||||
|
||||
/// A deterministic wrapper around FxHashSet that does not provide iteration support.
|
||||
///
|
||||
/// It supports insert, remove, get functions from FxHashSet.
|
||||
/// It also allows to convert hashset to a sorted vector with the method `into_sorted_vector()`.
|
||||
#[derive(Clone)]
|
||||
pub struct StableSet<T> {
|
||||
base: FxHashSet<T>,
|
||||
}
|
||||
|
||||
impl<T> Default for StableSet<T>
|
||||
where
|
||||
T: Eq + Hash,
|
||||
{
|
||||
fn default() -> StableSet<T> {
|
||||
StableSet::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> fmt::Debug for StableSet<T>
|
||||
where
|
||||
T: Eq + Hash + fmt::Debug,
|
||||
{
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{:?}", self.base)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> PartialEq<StableSet<T>> for StableSet<T>
|
||||
where
|
||||
T: Eq + Hash,
|
||||
{
|
||||
fn eq(&self, other: &StableSet<T>) -> bool {
|
||||
self.base == other.base
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Eq for StableSet<T> where T: Eq + Hash {}
|
||||
|
||||
impl<T: Hash + Eq> StableSet<T> {
|
||||
pub fn new() -> StableSet<T> {
|
||||
StableSet { base: FxHashSet::default() }
|
||||
}
|
||||
|
||||
pub fn into_sorted_vector(self) -> Vec<T>
|
||||
where
|
||||
T: Ord,
|
||||
{
|
||||
let mut vector = self.base.into_iter().collect::<Vec<_>>();
|
||||
vector.sort_unstable();
|
||||
vector
|
||||
}
|
||||
|
||||
pub fn get<Q: ?Sized>(&self, value: &Q) -> Option<&T>
|
||||
where
|
||||
T: Borrow<Q>,
|
||||
Q: Hash + Eq,
|
||||
{
|
||||
self.base.get(value)
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, value: T) -> bool {
|
||||
self.base.insert(value)
|
||||
}
|
||||
|
||||
pub fn remove<Q: ?Sized>(&mut self, value: &Q) -> bool
|
||||
where
|
||||
T: Borrow<Q>,
|
||||
Q: Hash + Eq,
|
||||
{
|
||||
self.base.remove(value)
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ use crate::{
|
||||
CodeSuggestion, DiagnosticMessage, EmissionGuarantee, Level, LintDiagnosticBuilder, MultiSpan,
|
||||
SubdiagnosticMessage, Substitution, SubstitutionPart, SuggestionStyle,
|
||||
};
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_error_messages::FluentValue;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint_defs::{Applicability, LintExpectationId};
|
||||
|
@ -11,7 +11,7 @@ use crate::def_id::DefId;
|
||||
use crate::{MethodKind, Target};
|
||||
|
||||
use rustc_ast as ast;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::fx::FxIndexMap;
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::symbol::{kw, sym, Symbol};
|
||||
@ -134,8 +134,8 @@ macro_rules! language_item_table {
|
||||
}
|
||||
|
||||
/// A mapping from the name of the lang item to its order and the form it must be of.
|
||||
pub static ITEM_REFS: LazyLock<FxHashMap<Symbol, (usize, Target)>> = LazyLock::new(|| {
|
||||
let mut item_refs = FxHashMap::default();
|
||||
pub static ITEM_REFS: LazyLock<FxIndexMap<Symbol, (usize, Target)>> = LazyLock::new(|| {
|
||||
let mut item_refs = FxIndexMap::default();
|
||||
$( item_refs.insert($module::$name, (LangItem::$variant as usize, $target)); )*
|
||||
item_refs
|
||||
});
|
||||
|
@ -1,7 +1,7 @@
|
||||
use crate::def::{CtorOf, DefKind, Res};
|
||||
use crate::def_id::DefId;
|
||||
use crate::hir::{self, HirId, PatKind};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_span::hygiene::DesugaringKind;
|
||||
use rustc_span::symbol::Ident;
|
||||
use rustc_span::Span;
|
||||
|
@ -4,7 +4,7 @@ use crate::def_id::DefId;
|
||||
use crate::{lang_items, LangItem, LanguageItems};
|
||||
|
||||
use rustc_ast as ast;
|
||||
use rustc_data_structures::stable_map::StableMap;
|
||||
use rustc_data_structures::fx::FxIndexMap;
|
||||
use rustc_span::symbol::{sym, Symbol};
|
||||
|
||||
use std::sync::LazyLock;
|
||||
@ -12,8 +12,8 @@ use std::sync::LazyLock;
|
||||
macro_rules! weak_lang_items {
|
||||
($($name:ident, $item:ident, $sym:ident;)*) => (
|
||||
|
||||
pub static WEAK_ITEMS_REFS: LazyLock<StableMap<Symbol, LangItem>> = LazyLock::new(|| {
|
||||
let mut map = StableMap::default();
|
||||
pub static WEAK_ITEMS_REFS: LazyLock<FxIndexMap<Symbol, LangItem>> = LazyLock::new(|| {
|
||||
let mut map = FxIndexMap::default();
|
||||
$(map.insert(sym::$name, LangItem::$item);)*
|
||||
map
|
||||
});
|
||||
|
@ -23,7 +23,7 @@
|
||||
//! was re-used.
|
||||
|
||||
use rustc_ast as ast;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_hir::def_id::LOCAL_CRATE;
|
||||
use rustc_middle::mir::mono::CodegenUnitNameBuilder;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
|
@ -3,7 +3,7 @@
|
||||
//! [work products]: WorkProduct
|
||||
|
||||
use crate::persist::fs::*;
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_fs_util::link_or_copy;
|
||||
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
||||
use rustc_session::Session;
|
||||
|
@ -6,7 +6,7 @@ use crate::infer::error_reporting::note_and_explain_region;
|
||||
use crate::infer::lexical_region_resolve::RegionResolutionError;
|
||||
use crate::infer::{SubregionOrigin, TypeTrace};
|
||||
use crate::traits::ObligationCauseCode;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_errors::{Applicability, ErrorGuaranteed, MultiSpan};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::intravisit::Visitor;
|
||||
|
@ -4,7 +4,7 @@ use crate::infer::error_reporting::nice_region_error::NiceRegionError;
|
||||
use crate::infer::lexical_region_resolve::RegionResolutionError;
|
||||
use crate::infer::{SubregionOrigin, TypeTrace};
|
||||
use crate::traits::{ObligationCauseCode, UnifyReceiverContext};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_errors::{struct_span_err, Applicability, Diagnostic, ErrorGuaranteed, MultiSpan};
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::intravisit::{walk_ty, Visitor};
|
||||
|
@ -357,7 +357,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
||||
let trait_predicates = self.tcx.explicit_predicates_of(trait_item_def_id);
|
||||
let impl_predicates = self.tcx.explicit_predicates_of(impl_item_def_id);
|
||||
|
||||
let impl_predicates: rustc_data_structures::stable_set::FxHashSet<_> =
|
||||
let impl_predicates: rustc_data_structures::fx::FxHashSet<_> =
|
||||
impl_predicates.predicates.into_iter().map(|(pred, _)| pred).collect();
|
||||
let clauses: Vec<_> = trait_predicates
|
||||
.predicates
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
use crate::mir::{Body, ConstantKind, Promoted};
|
||||
use crate::ty::{self, OpaqueHiddenType, Ty, TyCtxt};
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::vec_map::VecMap;
|
||||
use rustc_errors::ErrorGuaranteed;
|
||||
use rustc_hir as hir;
|
||||
|
@ -1,8 +1,8 @@
|
||||
//! Lazily compute the inverse of each `SwitchInt`'s switch targets. Modeled after
|
||||
//! `Predecessors`/`PredecessorCache`.
|
||||
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::sync::OnceCell;
|
||||
use rustc_index::vec::IndexVec;
|
||||
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
|
||||
|
@ -1,4 +1,4 @@
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
|
||||
use crate::ty::{PolyTraitRef, TyCtxt};
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
//! A pass that eliminates branches on uninhabited enum variants.
|
||||
|
||||
use crate::MirPass;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_middle::mir::{
|
||||
BasicBlockData, Body, Local, Operand, Rvalue, StatementKind, SwitchTargets, Terminator,
|
||||
TerminatorKind,
|
||||
|
@ -68,7 +68,7 @@ fn verify<'tcx>(tcx: TyCtxt<'tcx>, items: &lang_items::LanguageItems) {
|
||||
}
|
||||
}
|
||||
|
||||
for (name, item) in WEAK_ITEMS_REFS.clone().into_sorted_vector().into_iter() {
|
||||
for (name, &item) in WEAK_ITEMS_REFS.iter() {
|
||||
if missing.contains(&item) && required(tcx, item) && items.require(item).is_err() {
|
||||
if item == LangItem::PanicImpl {
|
||||
tcx.sess.err("`#[panic_handler]` function required, but not found");
|
||||
|
@ -1,6 +1,6 @@
|
||||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::Symbol;
|
||||
use std::fmt;
|
||||
|
@ -1,6 +1,6 @@
|
||||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::{sym, Symbol};
|
||||
use std::fmt;
|
||||
|
@ -1,6 +1,6 @@
|
||||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::{sym, Symbol};
|
||||
use std::fmt;
|
||||
|
@ -1,6 +1,6 @@
|
||||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::Symbol;
|
||||
use std::fmt;
|
||||
|
@ -47,7 +47,7 @@ fn compute_implied_outlives_bounds<'tcx>(
|
||||
// process it next. Because the resulting predicates aren't always
|
||||
// guaranteed to be a subset of the original type, so we need to store the
|
||||
// WF args we've computed in a set.
|
||||
let mut checked_wf_args = rustc_data_structures::stable_set::FxHashSet::default();
|
||||
let mut checked_wf_args = rustc_data_structures::fx::FxHashSet::default();
|
||||
let mut wf_args = vec![ty.into()];
|
||||
|
||||
let mut implied_bounds = vec![];
|
||||
|
@ -1,5 +1,5 @@
|
||||
//! Check whether a type is representable.
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_hir as hir;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
use rustc_span::Span;
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::Interner;
|
||||
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_serialize::{Decoder, Encoder};
|
||||
|
||||
/// The shorthand encoding uses an enum's variant index `usize`
|
||||
|
@ -2,7 +2,7 @@ use super::potentially_plural_count;
|
||||
use crate::check::regionck::OutlivesEnvironmentExt;
|
||||
use crate::check::wfcheck;
|
||||
use crate::errors::LifetimesOrBoundsMismatchOnTrait;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_errors::{pluralize, struct_span_err, Applicability, DiagnosticId, ErrorGuaranteed};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
|
@ -1,9 +1,8 @@
|
||||
use crate::check::FnCtxt;
|
||||
use rustc_data_structures::{
|
||||
fx::FxHashMap,
|
||||
fx::{FxHashMap, FxHashSet},
|
||||
graph::WithSuccessors,
|
||||
graph::{iterate::DepthFirstSearch, vec_graph::VecGraph},
|
||||
stable_set::FxHashSet,
|
||||
};
|
||||
use rustc_middle::ty::{self, Ty};
|
||||
|
||||
|
@ -3,7 +3,7 @@ use crate::astconv::AstConv;
|
||||
use crate::errors::{AddReturnTypeSuggestion, ExpectedReturnTypeLabel};
|
||||
|
||||
use rustc_ast::util::parser::ExprPrecedence;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_errors::{Applicability, Diagnostic, MultiSpan};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{CtorOf, DefKind};
|
||||
|
@ -17,8 +17,7 @@ use self::record_consumed_borrow::find_consumed_and_borrowed;
|
||||
use crate::check::FnCtxt;
|
||||
use hir::def_id::DefId;
|
||||
use hir::{Body, HirId, HirIdMap, Node};
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_hir as hir;
|
||||
use rustc_index::bit_set::BitSet;
|
||||
use rustc_index::vec::IndexVec;
|
||||
|
@ -6,7 +6,7 @@ use hir::{
|
||||
intravisit::{self, Visitor},
|
||||
Body, Expr, ExprKind, Guard, HirId, LoopIdError,
|
||||
};
|
||||
use rustc_data_structures::{fx::FxHashMap, stable_set::FxHashSet};
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_hir as hir;
|
||||
use rustc_index::vec::IndexVec;
|
||||
use rustc_middle::{
|
||||
|
@ -4,7 +4,7 @@ use crate::{
|
||||
expr_use_visitor::{self, ExprUseVisitor},
|
||||
};
|
||||
use hir::{def_id::DefId, Body, HirId, HirIdMap};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_hir as hir;
|
||||
use rustc_middle::hir::place::{PlaceBase, Projection, ProjectionKind};
|
||||
use rustc_middle::ty::{ParamEnv, TyCtxt};
|
||||
|
@ -1,5 +1,5 @@
|
||||
use rustc_ast::InlineAsmTemplatePiece;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_errors::struct_span_err;
|
||||
use rustc_hir as hir;
|
||||
use rustc_index::vec::Idx;
|
||||
|
@ -1,5 +1,5 @@
|
||||
use crate::outlives::outlives_bounds::InferCtxtExt as _;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_hir as hir;
|
||||
use rustc_infer::infer::outlives::env::OutlivesEnvironment;
|
||||
use rustc_infer::infer::InferCtxt;
|
||||
|
@ -49,8 +49,7 @@ use rustc_span::sym;
|
||||
use rustc_span::{BytePos, Pos, Span, Symbol};
|
||||
use rustc_trait_selection::infer::InferCtxtExt;
|
||||
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_index::vec::Idx;
|
||||
use rustc_target::abi::VariantIdx;
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
use crate::check::FnCtxt;
|
||||
|
||||
use hir::def_id::LocalDefId;
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_errors::ErrorGuaranteed;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def_id::DefId;
|
||||
|
@ -4,7 +4,10 @@
|
||||
|
||||
use pulldown_cmark::LinkType;
|
||||
use rustc_ast::util::comments::may_have_doc_links;
|
||||
use rustc_data_structures::{fx::FxHashMap, intern::Interned, stable_set::FxHashSet};
|
||||
use rustc_data_structures::{
|
||||
fx::{FxHashMap, FxHashSet},
|
||||
intern::Interned,
|
||||
};
|
||||
use rustc_errors::{Applicability, Diagnostic};
|
||||
use rustc_hir::def::Namespace::*;
|
||||
use rustc_hir::def::{DefKind, Namespace, PerNS};
|
||||
|
@ -1,11 +1,11 @@
|
||||
error: extern location for std does not exist:
|
||||
|
||||
error: `#[panic_handler]` function required, but not found
|
||||
|
||||
error: language item required, but not found: `eh_personality`
|
||||
|
|
||||
= note: this can occur when a binary crate with `#![no_std]` is compiled for a target where `eh_personality` is defined in the standard library
|
||||
= help: you may be able to compile for a target that doesn't need `eh_personality`, specify a target with `--target` or in `.cargo/config`
|
||||
|
||||
error: `#[panic_handler]` function required, but not found
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -10,13 +10,13 @@ help: you can use `as` to change the binding name of the import
|
||||
LL | extern crate core as other_core;
|
||||
|
|
||||
|
||||
error: `#[panic_handler]` function required, but not found
|
||||
|
||||
error: language item required, but not found: `eh_personality`
|
||||
|
|
||||
= note: this can occur when a binary crate with `#![no_std]` is compiled for a target where `eh_personality` is defined in the standard library
|
||||
= help: you may be able to compile for a target that doesn't need `eh_personality`, specify a target with `--target` or in `.cargo/config`
|
||||
|
||||
error: `#[panic_handler]` function required, but not found
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0259`.
|
||||
|
Loading…
Reference in New Issue
Block a user