Rollup merge of #139494 - compiler-errors:restrict-queries, r=oli-obk
Restrict some queries by def-kind more Random cleanup. I prefer things to assert more so as to catch bugs :) r? oli-obk
This commit is contained in:
commit
894f471d1e
6 changed files with 43 additions and 26 deletions
|
@ -14,6 +14,7 @@
|
|||
//! At present, however, we do run collection across all items in the
|
||||
//! crate as a kind of pass. This should eventually be factored away.
|
||||
|
||||
use std::assert_matches::assert_matches;
|
||||
use std::cell::Cell;
|
||||
use std::iter;
|
||||
use std::ops::Bound;
|
||||
|
@ -1344,7 +1345,8 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::EarlyBinder<'_, ty::PolyFn
|
|||
compute_sig_of_foreign_fn_decl(tcx, def_id, sig.decl, abi, sig.header.safety())
|
||||
}
|
||||
|
||||
Ctor(data) | Variant(hir::Variant { data, .. }) if data.ctor().is_some() => {
|
||||
Ctor(data) => {
|
||||
assert_matches!(data.ctor(), Some(_));
|
||||
let adt_def_id = tcx.hir_get_parent_item(hir_id).def_id.to_def_id();
|
||||
let ty = tcx.type_of(adt_def_id).instantiate_identity();
|
||||
let inputs = data.fields().iter().map(|f| tcx.type_of(f.def_id).instantiate_identity());
|
||||
|
|
|
@ -44,13 +44,13 @@ fn variances_of(tcx: TyCtxt<'_>, item_def_id: LocalDefId) -> &[ty::Variance] {
|
|||
return &[];
|
||||
}
|
||||
|
||||
match tcx.def_kind(item_def_id) {
|
||||
let kind = tcx.def_kind(item_def_id);
|
||||
match kind {
|
||||
DefKind::Fn
|
||||
| DefKind::AssocFn
|
||||
| DefKind::Enum
|
||||
| DefKind::Struct
|
||||
| DefKind::Union
|
||||
| DefKind::Variant
|
||||
| DefKind::Ctor(..) => {
|
||||
// These are inferred.
|
||||
let crate_map = tcx.crate_variances(());
|
||||
|
@ -89,7 +89,11 @@ fn variances_of(tcx: TyCtxt<'_>, item_def_id: LocalDefId) -> &[ty::Variance] {
|
|||
}
|
||||
|
||||
// Variance not relevant.
|
||||
span_bug!(tcx.def_span(item_def_id), "asked to compute variance for wrong kind of item");
|
||||
span_bug!(
|
||||
tcx.def_span(item_def_id),
|
||||
"asked to compute variance for {}",
|
||||
kind.descr(item_def_id.to_def_id())
|
||||
);
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
|
|
|
@ -1099,7 +1099,6 @@ fn should_encode_variances<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, def_kind: Def
|
|||
DefKind::Struct
|
||||
| DefKind::Union
|
||||
| DefKind::Enum
|
||||
| DefKind::Variant
|
||||
| DefKind::OpaqueTy
|
||||
| DefKind::Fn
|
||||
| DefKind::Ctor(..)
|
||||
|
@ -1109,6 +1108,7 @@ fn should_encode_variances<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, def_kind: Def
|
|||
matches!(tcx.opt_rpitit_info(def_id), Some(ty::ImplTraitInTraitData::Trait { .. }))
|
||||
}
|
||||
DefKind::Mod
|
||||
| DefKind::Variant
|
||||
| DefKind::Field
|
||||
| DefKind::AssocConst
|
||||
| DefKind::TyParam
|
||||
|
|
|
@ -4,9 +4,9 @@ use rustc_data_structures::fx::FxHashMap;
|
|||
use rustc_hir as hir;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_hir::def_id::LocalDefId;
|
||||
use rustc_middle::bug;
|
||||
use rustc_middle::query::Providers;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, fold_regions};
|
||||
use rustc_middle::{bug, span_bug};
|
||||
use rustc_span::Span;
|
||||
|
||||
pub(crate) fn provide(providers: &mut Providers) {
|
||||
|
@ -21,7 +21,8 @@ pub(crate) fn provide(providers: &mut Providers) {
|
|||
}
|
||||
|
||||
fn assumed_wf_types<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> &'tcx [(Ty<'tcx>, Span)] {
|
||||
match tcx.def_kind(def_id) {
|
||||
let kind = tcx.def_kind(def_id);
|
||||
match kind {
|
||||
DefKind::Fn => {
|
||||
let sig = tcx.fn_sig(def_id).instantiate_identity();
|
||||
let liberated_sig = tcx.liberate_late_bound_regions(def_id.to_def_id(), sig);
|
||||
|
@ -121,32 +122,38 @@ fn assumed_wf_types<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> &'tcx [(Ty<'
|
|||
}
|
||||
}
|
||||
DefKind::AssocConst | DefKind::AssocTy => tcx.assumed_wf_types(tcx.local_parent(def_id)),
|
||||
DefKind::OpaqueTy => bug!("implied bounds are not defined for opaques"),
|
||||
DefKind::Mod
|
||||
DefKind::Static { .. }
|
||||
| DefKind::Const
|
||||
| DefKind::AnonConst
|
||||
| DefKind::InlineConst
|
||||
| DefKind::Struct
|
||||
| DefKind::Union
|
||||
| DefKind::Enum
|
||||
| DefKind::Variant
|
||||
| DefKind::Trait
|
||||
| DefKind::TyAlias
|
||||
| DefKind::ForeignTy
|
||||
| DefKind::TraitAlias
|
||||
| DefKind::TyAlias => ty::List::empty(),
|
||||
DefKind::OpaqueTy
|
||||
| DefKind::Mod
|
||||
| DefKind::Variant
|
||||
| DefKind::ForeignTy
|
||||
| DefKind::TyParam
|
||||
| DefKind::Const
|
||||
| DefKind::ConstParam
|
||||
| DefKind::Static { .. }
|
||||
| DefKind::Ctor(_, _)
|
||||
| DefKind::Macro(_)
|
||||
| DefKind::ExternCrate
|
||||
| DefKind::Use
|
||||
| DefKind::ForeignMod
|
||||
| DefKind::AnonConst
|
||||
| DefKind::InlineConst
|
||||
| DefKind::Field
|
||||
| DefKind::LifetimeParam
|
||||
| DefKind::GlobalAsm
|
||||
| DefKind::Closure
|
||||
| DefKind::SyntheticCoroutineBody => ty::List::empty(),
|
||||
| DefKind::SyntheticCoroutineBody => {
|
||||
span_bug!(
|
||||
tcx.def_span(def_id),
|
||||
"`assumed_wf_types` not defined for {} `{def_id:?}`",
|
||||
kind.descr(def_id.to_def_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,10 +3,10 @@ use rustc_hir::def::DefKind;
|
|||
use rustc_hir::def_id::LocalDefId;
|
||||
use rustc_hir::intravisit;
|
||||
use rustc_hir::intravisit::Visitor;
|
||||
use rustc_middle::bug;
|
||||
use rustc_middle::query::Providers;
|
||||
use rustc_middle::ty::util::{CheckRegions, NotUniqueParam};
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeSuperVisitable, TypeVisitable, TypeVisitor};
|
||||
use rustc_middle::{bug, span_bug};
|
||||
use rustc_span::Span;
|
||||
use tracing::{instrument, trace};
|
||||
|
||||
|
@ -320,9 +320,12 @@ fn opaque_types_defined_by<'tcx>(
|
|||
| DefKind::AnonConst => {
|
||||
collector.collect_taits_declared_in_body();
|
||||
}
|
||||
// Closures and coroutines are type checked with their parent
|
||||
DefKind::Closure | DefKind::InlineConst => {
|
||||
collector.opaques.extend(tcx.opaque_types_defined_by(tcx.local_parent(item)));
|
||||
}
|
||||
DefKind::AssocTy | DefKind::TyAlias | DefKind::GlobalAsm => {}
|
||||
DefKind::OpaqueTy
|
||||
| DefKind::TyAlias
|
||||
| DefKind::AssocTy
|
||||
| DefKind::Mod
|
||||
| DefKind::Struct
|
||||
| DefKind::Union
|
||||
|
@ -340,12 +343,13 @@ fn opaque_types_defined_by<'tcx>(
|
|||
| DefKind::ForeignMod
|
||||
| DefKind::Field
|
||||
| DefKind::LifetimeParam
|
||||
| DefKind::GlobalAsm
|
||||
| DefKind::Impl { .. }
|
||||
| DefKind::SyntheticCoroutineBody => {}
|
||||
// Closures and coroutines are type checked with their parent
|
||||
DefKind::Closure | DefKind::InlineConst => {
|
||||
collector.opaques.extend(tcx.opaque_types_defined_by(tcx.local_parent(item)));
|
||||
| DefKind::SyntheticCoroutineBody => {
|
||||
span_bug!(
|
||||
tcx.def_span(item),
|
||||
"`opaque_types_defined_by` not defined for {} `{item:?}`",
|
||||
kind.descr(item.to_def_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
tcx.mk_local_def_ids(&collector.opaques)
|
||||
|
|
|
@ -116,7 +116,7 @@ pub fn walk_types<'tcx, V: SpannedTypeVisitor<'tcx>>(
|
|||
"{kind:?} has not seen any uses of `walk_types` yet, ping oli-obk if you'd like any help"
|
||||
)
|
||||
}
|
||||
// These don't have any types.
|
||||
// These don't have any types, but are visited during privacy checking.
|
||||
| DefKind::ExternCrate
|
||||
| DefKind::ForeignMod
|
||||
| DefKind::ForeignTy
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue