mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Make concrete_opaque_types be FxHashSet<DefId>
This commit is contained in:
parent
d488de82f3
commit
0aa0d59e51
@ -32,7 +32,6 @@ use rustc_data_structures::sharded::{IntoPointer, ShardedHashMap};
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_data_structures::steal::Steal;
|
||||
use rustc_data_structures::sync::{self, Lock, Lrc, WorkerLocal};
|
||||
use rustc_data_structures::vec_map::VecMap;
|
||||
use rustc_errors::ErrorReported;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
@ -46,7 +45,6 @@ use rustc_hir::{
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
use rustc_macros::HashStable;
|
||||
use rustc_middle::mir::FakeReadCause;
|
||||
use rustc_middle::ty::OpaqueTypeKey;
|
||||
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
|
||||
use rustc_session::config::{BorrowckMode, CrateType, OutputFilenames};
|
||||
use rustc_session::lint::{Level, Lint};
|
||||
@ -477,7 +475,7 @@ pub struct TypeckResults<'tcx> {
|
||||
|
||||
/// All the opaque types that are restricted to concrete types
|
||||
/// by this function.
|
||||
pub concrete_opaque_types: VecMap<OpaqueTypeKey<'tcx>, Ty<'tcx>>,
|
||||
pub concrete_opaque_types: FxHashSet<DefId>,
|
||||
|
||||
/// Tracks the minimum captures required for a closure;
|
||||
/// see `MinCaptureInformationMap` for more details.
|
||||
|
@ -552,23 +552,7 @@ impl<'cx, 'tcx> WritebackCx<'cx, 'tcx> {
|
||||
// in some other location, or we'll end up emitting an error due
|
||||
// to the lack of defining usage
|
||||
if !skip_add {
|
||||
let old_concrete_ty = self
|
||||
.typeck_results
|
||||
.concrete_opaque_types
|
||||
.insert(opaque_type_key, definition_ty);
|
||||
if let Some(old_concrete_ty) = old_concrete_ty {
|
||||
if old_concrete_ty != definition_ty {
|
||||
span_bug!(
|
||||
span,
|
||||
"`visit_opaque_types` tried to write different types for the same \
|
||||
opaque type: {:?}, {:?}, {:?}, {:?}",
|
||||
opaque_type_key.def_id,
|
||||
definition_ty,
|
||||
opaque_defn,
|
||||
old_concrete_ty,
|
||||
);
|
||||
}
|
||||
}
|
||||
self.typeck_results.concrete_opaque_types.insert(opaque_type_key.def_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -540,13 +540,7 @@ fn find_opaque_ty_constraints(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Ty<'_> {
|
||||
}
|
||||
// Calling `mir_borrowck` can lead to cycle errors through
|
||||
// const-checking, avoid calling it if we don't have to.
|
||||
if self
|
||||
.tcx
|
||||
.typeck(def_id)
|
||||
.concrete_opaque_types
|
||||
.any_value_matching(|(key, _)| key.def_id == self.def_id)
|
||||
.is_none()
|
||||
{
|
||||
if !self.tcx.typeck(def_id).concrete_opaque_types.contains(&self.def_id) {
|
||||
debug!("no constraints in typeck results");
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user