mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
remove bound_type_of query; make type_of return EarlyBinder; change type_of in metadata
This commit is contained in:
parent
d822b97a27
commit
c183110cc2
@ -2592,7 +2592,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
if is_closure {
|
||||
None
|
||||
} else {
|
||||
let ty = self.infcx.tcx.bound_type_of(self.mir_def_id()).subst_identity();
|
||||
let ty = self.infcx.tcx.type_of(self.mir_def_id()).subst_identity();
|
||||
match ty.kind() {
|
||||
ty::FnDef(_, _) | ty::FnPtr(_) => self.annotate_fn_sig(
|
||||
self.mir_def_id(),
|
||||
|
@ -1185,7 +1185,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
let parent_self_ty =
|
||||
matches!(tcx.def_kind(parent_did), rustc_hir::def::DefKind::Impl { .. })
|
||||
.then_some(parent_did)
|
||||
.and_then(|did| match tcx.bound_type_of(did).subst_identity().kind() {
|
||||
.and_then(|did| match tcx.type_of(did).subst_identity().kind() {
|
||||
ty::Adt(def, ..) => Some(def.did()),
|
||||
_ => None,
|
||||
});
|
||||
|
@ -575,7 +575,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
||||
|
||||
let mut output_ty = self.regioncx.universal_regions().unnormalized_output_ty;
|
||||
if let ty::Alias(ty::Opaque, ty::AliasTy { def_id, .. }) = *output_ty.kind() {
|
||||
output_ty = self.infcx.tcx.bound_type_of(def_id).subst_identity()
|
||||
output_ty = self.infcx.tcx.type_of(def_id).subst_identity()
|
||||
};
|
||||
|
||||
debug!("report_fnmut_error: output_ty={:?}", output_ty);
|
||||
@ -896,7 +896,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
||||
debug!(?fn_did, ?substs);
|
||||
|
||||
// Only suggest this on function calls, not closures
|
||||
let ty = tcx.bound_type_of(fn_did).subst_identity();
|
||||
let ty = tcx.type_of(fn_did).subst_identity();
|
||||
debug!("ty: {:?}, ty.kind: {:?}", ty, ty.kind());
|
||||
if let ty::Closure(_, _) = ty.kind() {
|
||||
return;
|
||||
|
@ -849,10 +849,9 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
|
||||
return None;
|
||||
};
|
||||
|
||||
let found = tcx
|
||||
.any_free_region_meets(&tcx.bound_type_of(region_parent).subst_identity(), |r| {
|
||||
*r == ty::ReEarlyBound(region)
|
||||
});
|
||||
let found = tcx.any_free_region_meets(&tcx.type_of(region_parent).subst_identity(), |r| {
|
||||
*r == ty::ReEarlyBound(region)
|
||||
});
|
||||
|
||||
Some(RegionName {
|
||||
name: self.synthesize_region_name(),
|
||||
|
@ -402,7 +402,7 @@ impl<'a, 'b, 'tcx> Visitor<'tcx> for TypeVerifier<'a, 'b, 'tcx> {
|
||||
);
|
||||
}
|
||||
} else if let Some(static_def_id) = constant.check_static_ptr(tcx) {
|
||||
let unnormalized_ty = tcx.bound_type_of(static_def_id).subst_identity();
|
||||
let unnormalized_ty = tcx.type_of(static_def_id).subst_identity();
|
||||
let normalized_ty = self.cx.normalize(unnormalized_ty, locations);
|
||||
let literal_ty = constant.literal.ty().builtin_deref(true).unwrap().ty;
|
||||
|
||||
|
@ -482,11 +482,8 @@ impl<'cx, 'tcx> UniversalRegionsBuilder<'cx, 'tcx> {
|
||||
);
|
||||
let region =
|
||||
self.infcx.tcx.mk_re_var(self.infcx.next_nll_region_var(FR).to_region_vid());
|
||||
let va_list_ty = self
|
||||
.infcx
|
||||
.tcx
|
||||
.bound_type_of(va_list_did)
|
||||
.subst(self.infcx.tcx, &[region.into()]);
|
||||
let va_list_ty =
|
||||
self.infcx.tcx.type_of(va_list_did).subst(self.infcx.tcx, &[region.into()]);
|
||||
|
||||
unnormalized_input_tys = self.infcx.tcx.mk_type_list(
|
||||
unnormalized_input_tys.iter().copied().chain(iter::once(va_list_ty)),
|
||||
@ -529,7 +526,7 @@ impl<'cx, 'tcx> UniversalRegionsBuilder<'cx, 'tcx> {
|
||||
match tcx.hir().body_owner_kind(self.mir_def.did) {
|
||||
BodyOwnerKind::Closure | BodyOwnerKind::Fn => {
|
||||
let defining_ty = if self.mir_def.did.to_def_id() == typeck_root_def_id {
|
||||
tcx.bound_type_of(typeck_root_def_id).subst_identity()
|
||||
tcx.type_of(typeck_root_def_id).subst_identity()
|
||||
} else {
|
||||
let tables = tcx.typeck(self.mir_def.did);
|
||||
tables.node_type(self.mir_hir_id)
|
||||
@ -675,7 +672,7 @@ impl<'cx, 'tcx> UniversalRegionsBuilder<'cx, 'tcx> {
|
||||
// For a constant body, there are no inputs, and one
|
||||
// "output" (the type of the constant).
|
||||
assert_eq!(self.mir_def.did.to_def_id(), def_id);
|
||||
let ty = tcx.bound_type_of(self.mir_def.def_id_for_type_of()).subst_identity();
|
||||
let ty = tcx.type_of(self.mir_def.def_id_for_type_of()).subst_identity();
|
||||
let ty = indices.fold_to_region_vids(tcx, ty);
|
||||
ty::Binder::dummy(tcx.intern_type_list(&[ty]))
|
||||
}
|
||||
|
@ -508,7 +508,7 @@ impl<'ll, 'tcx> DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
||||
let impl_self_ty = cx.tcx.subst_and_normalize_erasing_regions(
|
||||
instance.substs,
|
||||
ty::ParamEnv::reveal_all(),
|
||||
cx.tcx.bound_type_of(impl_def_id).skip_binder(),
|
||||
cx.tcx.type_of(impl_def_id).skip_binder(),
|
||||
);
|
||||
|
||||
// Only "class" methods are generally understood by LLVM,
|
||||
|
@ -95,7 +95,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
// Allocate memory for `CallerLocation` struct.
|
||||
let loc_ty = self
|
||||
.tcx
|
||||
.bound_type_of(self.tcx.require_lang_item(LangItem::PanicLocation, None))
|
||||
.type_of(self.tcx.require_lang_item(LangItem::PanicLocation, None))
|
||||
.subst(*self.tcx, self.tcx.mk_substs([self.tcx.lifetimes.re_erased.into()].iter()));
|
||||
let loc_layout = self.layout_of(loc_ty).unwrap();
|
||||
let location = self.allocate(loc_layout, MemoryKind::CallerLocation).unwrap();
|
||||
|
@ -690,7 +690,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
assert!(self.tcx.is_static(def_id));
|
||||
assert!(!self.tcx.is_thread_local_static(def_id));
|
||||
// Use size and align of the type.
|
||||
let ty = self.tcx.bound_type_of(def_id).subst_identity();
|
||||
let ty = self.tcx.type_of(def_id).subst_identity();
|
||||
let layout = self.tcx.layout_of(ParamEnv::empty().and(ty)).unwrap();
|
||||
assert!(layout.is_sized());
|
||||
(layout.size, layout.align.abi, AllocKind::LiveData)
|
||||
|
@ -68,7 +68,7 @@ impl<'mir, 'tcx> ConstCx<'mir, 'tcx> {
|
||||
pub fn fn_sig(&self) -> PolyFnSig<'tcx> {
|
||||
let did = self.def_id().to_def_id();
|
||||
if self.tcx.is_closure(did) {
|
||||
let ty = self.tcx.bound_type_of(did).subst_identity();
|
||||
let ty = self.tcx.type_of(did).subst_identity();
|
||||
let ty::Closure(_, substs) = ty.kind() else { bug!("type_of closure not ty::Closure") };
|
||||
substs.as_closure().sig()
|
||||
} else {
|
||||
|
@ -334,7 +334,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
|
||||
|
||||
let kind = match parent_ty.ty.kind() {
|
||||
&ty::Alias(ty::Opaque, ty::AliasTy { def_id, substs, .. }) => {
|
||||
self.tcx.bound_type_of(def_id).subst(self.tcx, substs).kind()
|
||||
self.tcx.type_of(def_id).subst(self.tcx, substs).kind()
|
||||
}
|
||||
kind => kind,
|
||||
};
|
||||
|
@ -77,7 +77,7 @@ fn generic_arg_mismatch_err(
|
||||
Res::Def(DefKind::TyParam, src_def_id) => {
|
||||
if let Some(param_local_id) = param.def_id.as_local() {
|
||||
let param_name = tcx.hir().ty_param_name(param_local_id);
|
||||
let param_type = tcx.bound_type_of(param.def_id).subst_identity();
|
||||
let param_type = tcx.type_of(param.def_id).subst_identity();
|
||||
if param_type.is_suggestable(tcx, false) {
|
||||
err.span_suggestion(
|
||||
tcx.def_span(src_def_id),
|
||||
@ -97,7 +97,7 @@ fn generic_arg_mismatch_err(
|
||||
(
|
||||
GenericArg::Type(hir::Ty { kind: hir::TyKind::Array(_, len), .. }),
|
||||
GenericParamDefKind::Const { .. },
|
||||
) if tcx.bound_type_of(param.def_id).skip_binder() == tcx.types.usize => {
|
||||
) if tcx.type_of(param.def_id).skip_binder() == tcx.types.usize => {
|
||||
let snippet = sess.source_map().span_to_snippet(tcx.hir().span(len.hir_id()));
|
||||
if let Ok(snippet) = snippet {
|
||||
err.span_suggestion(
|
||||
|
@ -450,7 +450,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
.into()
|
||||
}
|
||||
(&GenericParamDefKind::Const { .. }, hir::GenericArg::Infer(inf)) => {
|
||||
let ty = tcx.at(self.span).bound_type_of(param.def_id).subst_identity();
|
||||
let ty = tcx.at(self.span).type_of(param.def_id).subst_identity();
|
||||
if self.astconv.allow_ty_infer() {
|
||||
self.astconv.ct_infer(ty, Some(param), inf.span).into()
|
||||
} else {
|
||||
@ -494,7 +494,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
// Avoid ICE #86756 when type error recovery goes awry.
|
||||
return tcx.ty_error().into();
|
||||
}
|
||||
tcx.at(self.span).bound_type_of(param.def_id).subst(tcx, substs).into()
|
||||
tcx.at(self.span).type_of(param.def_id).subst(tcx, substs).into()
|
||||
} else if infer_args {
|
||||
self.astconv.ty_infer(Some(param), self.span).into()
|
||||
} else {
|
||||
@ -503,7 +503,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
}
|
||||
}
|
||||
GenericParamDefKind::Const { has_default } => {
|
||||
let ty = tcx.at(self.span).bound_type_of(param.def_id).subst_identity();
|
||||
let ty = tcx.at(self.span).type_of(param.def_id).subst_identity();
|
||||
if ty.references_error() {
|
||||
return tcx.const_error(ty).into();
|
||||
}
|
||||
@ -1230,7 +1230,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
}
|
||||
hir::def::DefKind::AssocConst => tcx
|
||||
.const_error_with_guaranteed(
|
||||
tcx.bound_type_of(assoc_item_def_id)
|
||||
tcx.type_of(assoc_item_def_id)
|
||||
.subst(tcx, projection_ty.skip_binder().substs),
|
||||
reported,
|
||||
)
|
||||
@ -1267,7 +1267,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
item_segment: &hir::PathSegment<'_>,
|
||||
) -> Ty<'tcx> {
|
||||
let substs = self.ast_path_substs_for_ty(span, did, item_segment);
|
||||
self.tcx().at(span).bound_type_of(did).subst(self.tcx(), substs)
|
||||
self.tcx().at(span).type_of(did).subst(self.tcx(), substs)
|
||||
}
|
||||
|
||||
fn conv_object_ty_poly_trait_ref(
|
||||
@ -2046,7 +2046,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
assoc_segment,
|
||||
adt_substs,
|
||||
);
|
||||
let ty = tcx.bound_type_of(assoc_ty_did).subst(tcx, item_substs);
|
||||
let ty = tcx.type_of(assoc_ty_did).subst(tcx, item_substs);
|
||||
return Ok((ty, DefKind::AssocTy, assoc_ty_did));
|
||||
}
|
||||
}
|
||||
@ -2688,7 +2688,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
// `Self` in impl (we know the concrete type).
|
||||
assert_eq!(opt_self_ty, None);
|
||||
// Try to evaluate any array length constants.
|
||||
let ty = tcx.at(span).bound_type_of(def_id).subst_identity();
|
||||
let ty = tcx.at(span).type_of(def_id).subst_identity();
|
||||
let span_of_impl = tcx.span_of_impl(def_id);
|
||||
self.prohibit_generics(path.segments.iter(), |err| {
|
||||
let def_id = match *ty.kind() {
|
||||
@ -2922,7 +2922,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
None,
|
||||
ty::BoundConstness::NotConst,
|
||||
);
|
||||
tcx.at(span).bound_type_of(def_id).subst(tcx, substs)
|
||||
tcx.at(span).type_of(def_id).subst(tcx, substs)
|
||||
}
|
||||
hir::TyKind::Array(ty, length) => {
|
||||
let length = match length {
|
||||
@ -2935,7 +2935,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
||||
tcx.mk_array_with_const_len(self.ast_ty_to_ty(ty), length)
|
||||
}
|
||||
hir::TyKind::Typeof(e) => {
|
||||
let ty_erased = tcx.bound_type_of(e.def_id).subst_identity();
|
||||
let ty_erased = tcx.type_of(e.def_id).subst_identity();
|
||||
let ty = tcx.fold_regions(ty_erased, |r, _| {
|
||||
if r.is_erased() { tcx.lifetimes.re_static } else { r }
|
||||
});
|
||||
|
@ -93,7 +93,7 @@ fn check_union(tcx: TyCtxt<'_>, def_id: LocalDefId) {
|
||||
|
||||
/// Check that the fields of the `union` do not need dropping.
|
||||
fn check_union_fields(tcx: TyCtxt<'_>, span: Span, item_def_id: LocalDefId) -> bool {
|
||||
let item_type = tcx.bound_type_of(item_def_id).subst_identity();
|
||||
let item_type = tcx.type_of(item_def_id).subst_identity();
|
||||
if let ty::Adt(def, substs) = item_type.kind() {
|
||||
assert!(def.is_union());
|
||||
|
||||
@ -170,7 +170,7 @@ fn check_static_inhabited(tcx: TyCtxt<'_>, def_id: LocalDefId) {
|
||||
// would be enough to check this for `extern` statics, as statics with an initializer will
|
||||
// have UB during initialization if they are uninhabited, but there also seems to be no good
|
||||
// reason to allow any statics to be uninhabited.
|
||||
let ty = tcx.bound_type_of(def_id).subst_identity();
|
||||
let ty = tcx.type_of(def_id).subst_identity();
|
||||
let span = tcx.def_span(def_id);
|
||||
let layout = match tcx.layout_of(ParamEnv::reveal_all().and(ty)) {
|
||||
Ok(l) => l,
|
||||
@ -227,7 +227,7 @@ fn check_opaque(tcx: TyCtxt<'_>, id: hir::ItemId) {
|
||||
if !tcx.features().impl_trait_projections {
|
||||
check_opaque_for_inheriting_lifetimes(tcx, item.owner_id.def_id, span);
|
||||
}
|
||||
if tcx.bound_type_of(item.owner_id.def_id).subst_identity().references_error() {
|
||||
if tcx.type_of(item.owner_id.def_id).subst_identity().references_error() {
|
||||
return;
|
||||
}
|
||||
if check_opaque_for_cycles(tcx, item.owner_id.def_id, substs, span, &origin).is_err() {
|
||||
@ -425,7 +425,7 @@ fn check_opaque_meets_bounds<'tcx>(
|
||||
//
|
||||
// FIXME: Consider wrapping the hidden type in an existential `Binder` and instantiating it
|
||||
// here rather than using ReErased.
|
||||
let hidden_ty = tcx.bound_type_of(def_id.to_def_id()).subst(tcx, substs);
|
||||
let hidden_ty = tcx.type_of(def_id.to_def_id()).subst(tcx, substs);
|
||||
let hidden_ty = tcx.fold_regions(hidden_ty, |re, _dbi| match re.kind() {
|
||||
ty::ReErased => infcx.next_region_var(RegionVariableOrigin::MiscVariable(span)),
|
||||
_ => re,
|
||||
@ -492,7 +492,7 @@ fn is_enum_of_nonnullable_ptr<'tcx>(
|
||||
|
||||
fn check_static_linkage(tcx: TyCtxt<'_>, def_id: LocalDefId) {
|
||||
if tcx.codegen_fn_attrs(def_id).import_linkage.is_some() {
|
||||
if match tcx.bound_type_of(def_id).subst_identity().kind() {
|
||||
if match tcx.type_of(def_id).subst_identity().kind() {
|
||||
ty::RawPtr(_) => false,
|
||||
ty::Adt(adt_def, substs) => !is_enum_of_nonnullable_ptr(tcx, *adt_def, *substs),
|
||||
_ => true,
|
||||
@ -578,7 +578,7 @@ fn check_item_type(tcx: TyCtxt<'_>, id: hir::ItemId) {
|
||||
}
|
||||
}
|
||||
DefKind::TyAlias => {
|
||||
let pty_ty = tcx.bound_type_of(id.owner_id).subst_identity();
|
||||
let pty_ty = tcx.type_of(id.owner_id).subst_identity();
|
||||
let generics = tcx.generics_of(id.owner_id);
|
||||
check_type_params_are_used(tcx, &generics, pty_ty);
|
||||
}
|
||||
@ -854,7 +854,7 @@ fn check_impl_items_against_trait<'tcx>(
|
||||
}
|
||||
|
||||
pub fn check_simd(tcx: TyCtxt<'_>, sp: Span, def_id: LocalDefId) {
|
||||
let t = tcx.bound_type_of(def_id).subst_identity();
|
||||
let t = tcx.type_of(def_id).subst_identity();
|
||||
if let ty::Adt(def, substs) = t.kind()
|
||||
&& def.is_struct()
|
||||
{
|
||||
@ -974,7 +974,7 @@ pub(super) fn check_packed(tcx: TyCtxt<'_>, sp: Span, def: ty::AdtDef<'_>) {
|
||||
&if first {
|
||||
format!(
|
||||
"`{}` contains a field of type `{}`",
|
||||
tcx.bound_type_of(def.did()).subst_identity(),
|
||||
tcx.type_of(def.did()).subst_identity(),
|
||||
ident
|
||||
)
|
||||
} else {
|
||||
@ -996,7 +996,7 @@ pub(super) fn check_packed_inner(
|
||||
def_id: DefId,
|
||||
stack: &mut Vec<DefId>,
|
||||
) -> Option<Vec<(DefId, Span)>> {
|
||||
if let ty::Adt(def, substs) = tcx.bound_type_of(def_id).subst_identity().kind() {
|
||||
if let ty::Adt(def, substs) = tcx.type_of(def_id).subst_identity().kind() {
|
||||
if def.is_struct() || def.is_union() {
|
||||
if def.repr().align.is_some() {
|
||||
return Some(vec![(def.did(), DUMMY_SP)]);
|
||||
|
@ -1580,8 +1580,7 @@ fn compare_generic_param_kinds<'tcx>(
|
||||
use GenericParamDefKind::*;
|
||||
if match (¶m_impl.kind, ¶m_trait.kind) {
|
||||
(Const { .. }, Const { .. })
|
||||
if tcx.bound_type_of(param_impl.def_id)
|
||||
!= tcx.bound_type_of(param_trait.def_id) =>
|
||||
if tcx.type_of(param_impl.def_id) != tcx.type_of(param_trait.def_id) =>
|
||||
{
|
||||
true
|
||||
}
|
||||
@ -1609,7 +1608,7 @@ fn compare_generic_param_kinds<'tcx>(
|
||||
format!(
|
||||
"{} const parameter of type `{}`",
|
||||
prefix,
|
||||
tcx.bound_type_of(param.def_id).subst_identity()
|
||||
tcx.type_of(param.def_id).subst_identity()
|
||||
)
|
||||
}
|
||||
Type { .. } => format!("{} type parameter", prefix),
|
||||
@ -1659,8 +1658,8 @@ pub(super) fn compare_impl_const_raw(
|
||||
// Create a parameter environment that represents the implementation's
|
||||
// method.
|
||||
// Compute placeholder form of impl and trait const tys.
|
||||
let impl_ty = tcx.bound_type_of(impl_const_item_def.to_def_id()).subst_identity();
|
||||
let trait_ty = tcx.bound_type_of(trait_const_item_def).subst(tcx, trait_to_impl_substs);
|
||||
let impl_ty = tcx.type_of(impl_const_item_def.to_def_id()).subst_identity();
|
||||
let trait_ty = tcx.type_of(trait_const_item_def).subst(tcx, trait_to_impl_substs);
|
||||
let mut cause = ObligationCause::new(
|
||||
impl_c_span,
|
||||
impl_const_item_def,
|
||||
@ -1932,7 +1931,7 @@ pub(super) fn check_type_bounds<'tcx>(
|
||||
bound_vars.push(bound_var);
|
||||
tcx.mk_const(
|
||||
ty::ConstKind::Bound(ty::INNERMOST, ty::BoundVar::from_usize(bound_vars.len() - 1)),
|
||||
tcx.bound_type_of(param.def_id).subst_identity(),
|
||||
tcx.type_of(param.def_id).subst_identity(),
|
||||
)
|
||||
.into()
|
||||
}
|
||||
@ -1942,7 +1941,7 @@ pub(super) fn check_type_bounds<'tcx>(
|
||||
let container_id = impl_ty.container_id(tcx);
|
||||
|
||||
let rebased_substs = impl_ty_substs.rebase_onto(tcx, container_id, impl_trait_ref.substs);
|
||||
let impl_ty_value = tcx.bound_type_of(impl_ty.def_id).subst_identity();
|
||||
let impl_ty_value = tcx.type_of(impl_ty.def_id).subst_identity();
|
||||
|
||||
let param_env = tcx.param_env(impl_ty.def_id);
|
||||
|
||||
|
@ -27,7 +27,7 @@ use rustc_middle::ty::{self, Predicate, Ty, TyCtxt};
|
||||
/// cannot do `struct S<T>; impl<T:Clone> Drop for S<T> { ... }`).
|
||||
///
|
||||
pub fn check_drop_impl(tcx: TyCtxt<'_>, drop_impl_did: DefId) -> Result<(), ErrorGuaranteed> {
|
||||
let dtor_self_type = tcx.bound_type_of(drop_impl_did).subst_identity();
|
||||
let dtor_self_type = tcx.type_of(drop_impl_did).subst_identity();
|
||||
let dtor_predicates = tcx.predicates_of(drop_impl_did);
|
||||
match dtor_self_type.kind() {
|
||||
ty::Adt(adt_def, self_to_impl_substs) => {
|
||||
|
@ -157,7 +157,7 @@ pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>) {
|
||||
ty::INNERMOST,
|
||||
ty::BoundRegion { var: ty::BoundVar::from_u32(1), kind: ty::BrEnv },
|
||||
);
|
||||
let va_list_ty = tcx.bound_type_of(did).subst(tcx, &[region.into()]);
|
||||
let va_list_ty = tcx.type_of(did).subst(tcx, &[region.into()]);
|
||||
(tcx.mk_ref(env_region, ty::TypeAndMut { ty: va_list_ty, mutbl }), va_list_ty)
|
||||
})
|
||||
};
|
||||
|
@ -450,7 +450,7 @@ fn suggestion_signature(assoc: &ty::AssocItem, tcx: TyCtxt<'_>) -> String {
|
||||
}
|
||||
ty::AssocKind::Type => format!("type {} = Type;", assoc.name),
|
||||
ty::AssocKind::Const => {
|
||||
let ty = tcx.bound_type_of(assoc.def_id).subst_identity();
|
||||
let ty = tcx.type_of(assoc.def_id).subst_identity();
|
||||
let val = ty_kind_suggestion(ty).unwrap_or("value");
|
||||
format!("const {}: {} = {};", assoc.name, ty, val)
|
||||
}
|
||||
|
@ -874,7 +874,7 @@ fn check_param_wf(tcx: TyCtxt<'_>, param: &hir::GenericParam<'_>) {
|
||||
|
||||
// Const parameters are well formed if their type is structural match.
|
||||
hir::GenericParamKind::Const { ty: hir_ty, default: _ } => {
|
||||
let ty = tcx.bound_type_of(param.def_id).subst_identity();
|
||||
let ty = tcx.type_of(param.def_id).subst_identity();
|
||||
|
||||
if tcx.features().adt_const_params {
|
||||
if let Some(non_structural_match_ty) =
|
||||
@ -1011,12 +1011,12 @@ fn check_associated_item(
|
||||
|
||||
let self_ty = match item.container {
|
||||
ty::TraitContainer => tcx.types.self_param,
|
||||
ty::ImplContainer => tcx.bound_type_of(item.container_id(tcx)).subst_identity(),
|
||||
ty::ImplContainer => tcx.type_of(item.container_id(tcx)).subst_identity(),
|
||||
};
|
||||
|
||||
match item.kind {
|
||||
ty::AssocKind::Const => {
|
||||
let ty = tcx.bound_type_of(item.def_id).subst_identity();
|
||||
let ty = tcx.type_of(item.def_id).subst_identity();
|
||||
let ty = wfcx.normalize(span, Some(WellFormedLoc::Ty(item_id)), ty);
|
||||
wfcx.register_wf_obligation(span, loc, ty.into());
|
||||
}
|
||||
@ -1037,7 +1037,7 @@ fn check_associated_item(
|
||||
check_associated_type_bounds(wfcx, item, span)
|
||||
}
|
||||
if item.defaultness(tcx).has_value() {
|
||||
let ty = tcx.bound_type_of(item.def_id).subst_identity();
|
||||
let ty = tcx.type_of(item.def_id).subst_identity();
|
||||
let ty = wfcx.normalize(span, Some(WellFormedLoc::Ty(item_id)), ty);
|
||||
wfcx.register_wf_obligation(span, loc, ty.into());
|
||||
}
|
||||
@ -1070,11 +1070,7 @@ fn check_type_defn<'tcx>(tcx: TyCtxt<'tcx>, item: &hir::Item<'tcx>, all_sized: b
|
||||
let field_id = field.did.expect_local();
|
||||
let hir::FieldDef { ty: hir_ty, .. } =
|
||||
tcx.hir().get_by_def_id(field_id).expect_field();
|
||||
let ty = wfcx.normalize(
|
||||
hir_ty.span,
|
||||
None,
|
||||
tcx.bound_type_of(field.did).subst_identity(),
|
||||
);
|
||||
let ty = wfcx.normalize(hir_ty.span, None, tcx.type_of(field.did).subst_identity());
|
||||
wfcx.register_wf_obligation(
|
||||
hir_ty.span,
|
||||
Some(WellFormedLoc::Ty(field_id)),
|
||||
@ -1086,7 +1082,7 @@ fn check_type_defn<'tcx>(tcx: TyCtxt<'tcx>, item: &hir::Item<'tcx>, all_sized: b
|
||||
// intermediate types must be sized.
|
||||
let needs_drop_copy = || {
|
||||
packed && {
|
||||
let ty = tcx.bound_type_of(variant.fields.last().unwrap().did).subst_identity();
|
||||
let ty = tcx.type_of(variant.fields.last().unwrap().did).subst_identity();
|
||||
let ty = tcx.erase_regions(ty);
|
||||
if ty.needs_infer() {
|
||||
tcx.sess
|
||||
@ -1108,11 +1104,7 @@ fn check_type_defn<'tcx>(tcx: TyCtxt<'tcx>, item: &hir::Item<'tcx>, all_sized: b
|
||||
let field_id = field.did.expect_local();
|
||||
let hir::FieldDef { ty: hir_ty, .. } =
|
||||
tcx.hir().get_by_def_id(field_id).expect_field();
|
||||
let ty = wfcx.normalize(
|
||||
hir_ty.span,
|
||||
None,
|
||||
tcx.bound_type_of(field.did).subst_identity(),
|
||||
);
|
||||
let ty = wfcx.normalize(hir_ty.span, None, tcx.type_of(field.did).subst_identity());
|
||||
wfcx.register_bound(
|
||||
traits::ObligationCause::new(
|
||||
hir_ty.span,
|
||||
@ -1223,7 +1215,7 @@ fn check_item_type(tcx: TyCtxt<'_>, item_id: LocalDefId, ty_span: Span, allow_fo
|
||||
debug!("check_item_type: {:?}", item_id);
|
||||
|
||||
enter_wf_checking_ctxt(tcx, ty_span, item_id, |wfcx| {
|
||||
let ty = tcx.bound_type_of(item_id).subst_identity();
|
||||
let ty = tcx.type_of(item_id).subst_identity();
|
||||
let item_ty = wfcx.normalize(ty_span, Some(WellFormedLoc::Ty(item_id)), ty);
|
||||
|
||||
let mut forbid_unsized = true;
|
||||
@ -1308,7 +1300,7 @@ fn check_impl<'tcx>(
|
||||
wfcx.register_obligations(obligations);
|
||||
}
|
||||
None => {
|
||||
let self_ty = tcx.bound_type_of(item.owner_id).subst_identity();
|
||||
let self_ty = tcx.type_of(item.owner_id).subst_identity();
|
||||
let self_ty = wfcx.normalize(
|
||||
item.span,
|
||||
Some(WellFormedLoc::Ty(item.hir_id().expect_owner().def_id)),
|
||||
@ -1353,7 +1345,7 @@ fn check_where_clauses<'tcx>(wfcx: &WfCheckingCtxt<'_, 'tcx>, span: Span, def_id
|
||||
match param.kind {
|
||||
GenericParamDefKind::Type { .. } => {
|
||||
if is_our_default(param) {
|
||||
let ty = tcx.bound_type_of(param.def_id).subst_identity();
|
||||
let ty = tcx.type_of(param.def_id).subst_identity();
|
||||
// Ignore dependent defaults -- that is, where the default of one type
|
||||
// parameter includes another (e.g., `<T, U = T>`). In those cases, we can't
|
||||
// be sure if it will error or not as user might always specify the other.
|
||||
@ -1405,7 +1397,7 @@ fn check_where_clauses<'tcx>(wfcx: &WfCheckingCtxt<'_, 'tcx>, span: Span, def_id
|
||||
GenericParamDefKind::Type { .. } => {
|
||||
// If the param has a default, ...
|
||||
if is_our_default(param) {
|
||||
let default_ty = tcx.bound_type_of(param.def_id).subst_identity();
|
||||
let default_ty = tcx.type_of(param.def_id).subst_identity();
|
||||
// ... and it's not a dependent default, ...
|
||||
if !default_ty.needs_subst() {
|
||||
// ... then substitute it with the default.
|
||||
@ -1821,7 +1813,7 @@ fn check_variances_for_type_defn<'tcx>(
|
||||
item: &hir::Item<'tcx>,
|
||||
hir_generics: &hir::Generics<'_>,
|
||||
) {
|
||||
let ty = tcx.bound_type_of(item.owner_id).subst_identity();
|
||||
let ty = tcx.type_of(item.owner_id).subst_identity();
|
||||
if tcx.has_error_field(ty) {
|
||||
return;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ impl<'tcx> Checker<'tcx> {
|
||||
|
||||
fn visit_implementation_of_drop(tcx: TyCtxt<'_>, impl_did: LocalDefId) {
|
||||
// Destructors only work on local ADT types.
|
||||
match tcx.bound_type_of(impl_did).subst_identity().kind() {
|
||||
match tcx.type_of(impl_did).subst_identity().kind() {
|
||||
ty::Adt(def, _) if def.did().is_local() => return,
|
||||
ty::Error(_) => return,
|
||||
_ => {}
|
||||
@ -64,7 +64,7 @@ fn visit_implementation_of_drop(tcx: TyCtxt<'_>, impl_did: LocalDefId) {
|
||||
fn visit_implementation_of_copy(tcx: TyCtxt<'_>, impl_did: LocalDefId) {
|
||||
debug!("visit_implementation_of_copy: impl_did={:?}", impl_did);
|
||||
|
||||
let self_type = tcx.bound_type_of(impl_did).subst_identity();
|
||||
let self_type = tcx.type_of(impl_did).subst_identity();
|
||||
debug!("visit_implementation_of_copy: self_type={:?} (bound)", self_type);
|
||||
|
||||
let param_env = tcx.param_env(impl_did);
|
||||
@ -206,7 +206,7 @@ fn visit_implementation_of_dispatch_from_dyn(tcx: TyCtxt<'_>, impl_did: LocalDef
|
||||
|
||||
let dispatch_from_dyn_trait = tcx.require_lang_item(LangItem::DispatchFromDyn, Some(span));
|
||||
|
||||
let source = tcx.bound_type_of(impl_did).subst_identity();
|
||||
let source = tcx.type_of(impl_did).subst_identity();
|
||||
assert!(!source.has_escaping_bound_vars());
|
||||
let target = {
|
||||
let trait_ref = tcx.impl_trait_ref(impl_did).unwrap().subst_identity();
|
||||
@ -370,7 +370,7 @@ pub fn coerce_unsized_info<'tcx>(tcx: TyCtxt<'tcx>, impl_did: DefId) -> CoerceUn
|
||||
tcx.sess.fatal(&format!("`CoerceUnsized` implementation {}", err.to_string()));
|
||||
});
|
||||
|
||||
let source = tcx.bound_type_of(impl_did).subst_identity();
|
||||
let source = tcx.type_of(impl_did).subst_identity();
|
||||
let trait_ref = tcx.impl_trait_ref(impl_did).unwrap().subst_identity();
|
||||
assert_eq!(trait_ref.def_id, coerce_unsized_trait);
|
||||
let target = trait_ref.substs.type_at(1);
|
||||
@ -482,7 +482,7 @@ pub fn coerce_unsized_info<'tcx>(tcx: TyCtxt<'tcx>, impl_did: DefId) -> CoerceUn
|
||||
.filter_map(|(i, f)| {
|
||||
let (a, b) = (f.ty(tcx, substs_a), f.ty(tcx, substs_b));
|
||||
|
||||
if tcx.bound_type_of(f.did).subst_identity().is_phantom_data() {
|
||||
if tcx.type_of(f.did).subst_identity().is_phantom_data() {
|
||||
// Ignore PhantomData fields
|
||||
return None;
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ impl<'tcx> InherentCollect<'tcx> {
|
||||
|
||||
let id = id.owner_id.def_id;
|
||||
let item_span = self.tcx.def_span(id);
|
||||
let self_ty = self.tcx.bound_type_of(id).subst_identity();
|
||||
let self_ty = self.tcx.type_of(id).subst_identity();
|
||||
match *self_ty.kind() {
|
||||
ty::Adt(def, _) => self.check_def_id(id, self_ty, def.did()),
|
||||
ty::Foreign(did) => self.check_def_id(id, self_ty, did),
|
||||
|
@ -1143,8 +1143,8 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::EarlyBinder<ty::PolyFnSig<'_>>
|
||||
}
|
||||
|
||||
Ctor(data) | Variant(hir::Variant { data, .. }) if data.ctor().is_some() => {
|
||||
let ty = tcx.bound_type_of(tcx.hir().get_parent_item(hir_id)).subst_identity();
|
||||
let inputs = data.fields().iter().map(|f| tcx.bound_type_of(f.def_id).subst_identity());
|
||||
let ty = tcx.type_of(tcx.hir().get_parent_item(hir_id)).subst_identity();
|
||||
let inputs = data.fields().iter().map(|f| tcx.type_of(f.def_id).subst_identity());
|
||||
ty::Binder::dummy(tcx.mk_fn_sig(
|
||||
inputs,
|
||||
ty,
|
||||
@ -1345,7 +1345,7 @@ fn impl_trait_ref(tcx: TyCtxt<'_>, def_id: DefId) -> Option<ty::EarlyBinder<ty::
|
||||
.of_trait
|
||||
.as_ref()
|
||||
.map(|ast_trait_ref| {
|
||||
let selfty = tcx.bound_type_of(def_id).subst_identity();
|
||||
let selfty = tcx.type_of(def_id).subst_identity();
|
||||
icx.astconv().instantiate_mono_trait_ref(
|
||||
ast_trait_ref,
|
||||
selfty,
|
||||
|
@ -1804,7 +1804,7 @@ fn is_late_bound_map(
|
||||
let mut walker = ConstrainedCollectorPostAstConv {
|
||||
arg_is_constrained: vec![false; generics.params.len()].into_boxed_slice(),
|
||||
};
|
||||
walker.visit_ty(self.tcx.bound_type_of(alias_def).subst_identity());
|
||||
walker.visit_ty(self.tcx.type_of(alias_def).subst_identity());
|
||||
|
||||
match segments.last() {
|
||||
Some(hir::PathSegment { args: Some(args), .. }) => {
|
||||
|
@ -251,7 +251,7 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
|
||||
// in trait checking. See `setup_constraining_predicates`
|
||||
// for details.
|
||||
if let Node::Item(&Item { kind: ItemKind::Impl { .. }, .. }) = node {
|
||||
let self_ty = tcx.bound_type_of(def_id).subst_identity();
|
||||
let self_ty = tcx.type_of(def_id).subst_identity();
|
||||
let trait_ref = tcx.impl_trait_ref(def_id).map(ty::EarlyBinder::subst_identity);
|
||||
cgp::setup_constraining_predicates(
|
||||
tcx,
|
||||
|
@ -243,7 +243,7 @@ fn get_path_containing_arg_in_pat<'hir>(
|
||||
arg_path
|
||||
}
|
||||
|
||||
pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::EarlyBinder<Ty<'_>> {
|
||||
let def_id = def_id.expect_local();
|
||||
use rustc_hir::*;
|
||||
|
||||
@ -251,7 +251,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
|
||||
let icx = ItemCtxt::new(tcx, def_id.to_def_id());
|
||||
|
||||
match tcx.hir().get(hir_id) {
|
||||
let output = match tcx.hir().get(hir_id) {
|
||||
Node::TraitItem(item) => match item.kind {
|
||||
TraitItemKind::Fn(..) => {
|
||||
let substs = InternalSubsts::identity_for_item(tcx, def_id.to_def_id());
|
||||
@ -377,7 +377,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
|
||||
Node::Ctor(def) | Node::Variant(Variant { data: def, .. }) => match def {
|
||||
VariantData::Unit(..) | VariantData::Struct(..) => {
|
||||
tcx.bound_type_of(tcx.hir().get_parent_item(hir_id)).subst_identity()
|
||||
tcx.type_of(tcx.hir().get_parent_item(hir_id)).subst_identity()
|
||||
}
|
||||
VariantData::Tuple(..) => {
|
||||
let substs = InternalSubsts::identity_for_item(tcx, def_id.to_def_id());
|
||||
@ -394,7 +394,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
Node::AnonConst(_) if let Some(param) = tcx.opt_const_param_of(def_id) => {
|
||||
// We defer to `type_of` of the corresponding parameter
|
||||
// for generic arguments.
|
||||
tcx.bound_type_of(param).subst_identity()
|
||||
tcx.type_of(param).subst_identity()
|
||||
}
|
||||
|
||||
Node::AnonConst(_) => {
|
||||
@ -446,7 +446,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
&& e.hir_id == hir_id =>
|
||||
{
|
||||
let Some(trait_def_id) = trait_ref.trait_def_id() else {
|
||||
return tcx.ty_error_with_message(DUMMY_SP, "Could not find trait");
|
||||
return ty::EarlyBinder(tcx.ty_error_with_message(DUMMY_SP, "Could not find trait"));
|
||||
};
|
||||
let assoc_items = tcx.associated_items(trait_def_id);
|
||||
let assoc_item = assoc_items.find_by_name_and_kind(
|
||||
@ -456,7 +456,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
def_id.to_def_id(),
|
||||
);
|
||||
if let Some(assoc_item) = assoc_item {
|
||||
tcx.bound_type_of(assoc_item.def_id).subst_identity()
|
||||
tcx.type_of(assoc_item.def_id).subst_identity()
|
||||
} else {
|
||||
// FIXME(associated_const_equality): add a useful error message here.
|
||||
tcx.ty_error_with_message(
|
||||
@ -480,7 +480,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
}) =>
|
||||
{
|
||||
let Some(trait_def_id) = trait_ref.trait_def_id() else {
|
||||
return tcx.ty_error_with_message(DUMMY_SP, "Could not find trait");
|
||||
return ty::EarlyBinder(tcx.ty_error_with_message(DUMMY_SP, "Could not find trait"));
|
||||
};
|
||||
let assoc_items = tcx.associated_items(trait_def_id);
|
||||
let assoc_item = assoc_items.find_by_name_and_kind(
|
||||
@ -501,7 +501,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
if let Some(param)
|
||||
= assoc_item.map(|item| &tcx.generics_of(item.def_id).params[idx]).filter(|param| param.kind.is_ty_or_const())
|
||||
{
|
||||
tcx.bound_type_of(param.def_id).subst_identity()
|
||||
tcx.type_of(param.def_id).subst_identity()
|
||||
} else {
|
||||
// FIXME(associated_const_equality): add a useful error message here.
|
||||
tcx.ty_error_with_message(
|
||||
@ -515,7 +515,7 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
def_id: param_def_id,
|
||||
kind: GenericParamKind::Const { default: Some(ct), .. },
|
||||
..
|
||||
}) if ct.hir_id == hir_id => tcx.bound_type_of(param_def_id).subst_identity(),
|
||||
}) if ct.hir_id == hir_id => tcx.type_of(param_def_id).subst_identity(),
|
||||
|
||||
x => tcx.ty_error_with_message(
|
||||
DUMMY_SP,
|
||||
@ -533,7 +533,8 @@ pub(super) fn type_of(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> {
|
||||
x => {
|
||||
bug!("unexpected sort of node in type_of(): {:?}", x);
|
||||
}
|
||||
}
|
||||
};
|
||||
ty::EarlyBinder(output)
|
||||
}
|
||||
|
||||
#[instrument(skip(tcx), level = "debug")]
|
||||
|
@ -70,7 +70,7 @@ pub fn provide(providers: &mut Providers) {
|
||||
|
||||
fn enforce_impl_params_are_constrained(tcx: TyCtxt<'_>, impl_def_id: LocalDefId) {
|
||||
// Every lifetime used in an associated type must be constrained.
|
||||
let impl_self_ty = tcx.bound_type_of(impl_def_id).subst_identity();
|
||||
let impl_self_ty = tcx.type_of(impl_def_id).subst_identity();
|
||||
if impl_self_ty.references_error() {
|
||||
// Don't complain about unconstrained type params when self ty isn't known due to errors.
|
||||
// (#36836)
|
||||
@ -104,7 +104,7 @@ fn enforce_impl_params_are_constrained(tcx: TyCtxt<'_>, impl_def_id: LocalDefId)
|
||||
match item.kind {
|
||||
ty::AssocKind::Type => {
|
||||
if item.defaultness(tcx).has_value() {
|
||||
cgp::parameters_for(&tcx.bound_type_of(def_id).subst_identity(), true)
|
||||
cgp::parameters_for(&tcx.type_of(def_id).subst_identity(), true)
|
||||
} else {
|
||||
Vec::new()
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ fn check_main_fn_ty(tcx: TyCtxt<'_>, main_def_id: DefId) {
|
||||
|
||||
fn main_fn_diagnostics_def_id(tcx: TyCtxt<'_>, def_id: DefId, sp: Span) -> LocalDefId {
|
||||
if let Some(local_def_id) = def_id.as_local() {
|
||||
let hir_type = tcx.bound_type_of(local_def_id).subst_identity();
|
||||
let hir_type = tcx.type_of(local_def_id).subst_identity();
|
||||
if !matches!(hir_type.kind(), ty::FnDef(..)) {
|
||||
span_bug!(sp, "main has a non-function type: found `{}`", hir_type);
|
||||
}
|
||||
@ -366,7 +366,7 @@ fn check_start_fn_ty(tcx: TyCtxt<'_>, start_def_id: DefId) {
|
||||
let start_def_id = start_def_id.expect_local();
|
||||
let start_id = tcx.hir().local_def_id_to_hir_id(start_def_id);
|
||||
let start_span = tcx.def_span(start_def_id);
|
||||
let start_t = tcx.bound_type_of(start_def_id).subst_identity();
|
||||
let start_t = tcx.type_of(start_def_id).subst_identity();
|
||||
match start_t.kind() {
|
||||
ty::FnDef(..) => {
|
||||
if let Some(Node::Item(it)) = tcx.hir().find(start_id) {
|
||||
|
@ -46,7 +46,7 @@ pub(super) fn infer_predicates(
|
||||
// For field of type &'a T (reference) or Adt
|
||||
// (struct/enum/union) there will be outlive
|
||||
// requirements for adt_def.
|
||||
let field_ty = tcx.bound_type_of(field_def.did).subst_identity();
|
||||
let field_ty = tcx.type_of(field_def.did).subst_identity();
|
||||
let field_span = tcx.def_span(field_def.did);
|
||||
insert_required_predicates_to_be_wf(
|
||||
tcx,
|
||||
|
@ -101,7 +101,7 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
|
||||
|
||||
let inferred_start = self.terms_cx.inferred_starts[&def_id];
|
||||
let current_item = &CurrentItem { inferred_start };
|
||||
match tcx.bound_type_of(def_id).subst_identity().kind() {
|
||||
match tcx.type_of(def_id).subst_identity().kind() {
|
||||
ty::Adt(def, _) => {
|
||||
// Not entirely obvious: constraints on structs/enums do not
|
||||
// affect the variance of their type parameters. See discussion
|
||||
@ -112,7 +112,7 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
|
||||
for field in def.all_fields() {
|
||||
self.add_constraints_from_ty(
|
||||
current_item,
|
||||
tcx.bound_type_of(field.did).subst_identity(),
|
||||
tcx.type_of(field.did).subst_identity(),
|
||||
self.covariant,
|
||||
);
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ impl<'a, 'tcx> SolveContext<'a, 'tcx> {
|
||||
self.enforce_const_invariance(generics, variances);
|
||||
|
||||
// Functions are permitted to have unused generic parameters: make those invariant.
|
||||
if let ty::FnDef(..) = tcx.bound_type_of(def_id).subst_identity().kind() {
|
||||
if let ty::FnDef(..) = tcx.type_of(def_id).subst_identity().kind() {
|
||||
for variance in variances.iter_mut() {
|
||||
if *variance == ty::Bivariant {
|
||||
*variance = ty::Invariant;
|
||||
|
@ -79,7 +79,7 @@ pub(super) fn check_fn<'a, 'tcx>(
|
||||
let va_list_did = tcx.require_lang_item(LangItem::VaList, Some(span));
|
||||
let region = fcx.next_region_var(RegionVariableOrigin::MiscVariable(span));
|
||||
|
||||
tcx.bound_type_of(va_list_did).subst(tcx, &[region.into()])
|
||||
tcx.type_of(va_list_did).subst(tcx, &[region.into()])
|
||||
});
|
||||
|
||||
// Add formal parameters.
|
||||
|
@ -2037,7 +2037,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
args: &[hir::Expr<'_>],
|
||||
kind: CallableKind| {
|
||||
let arg_idx = args.iter().position(|a| a.hir_id == expr.hir_id).unwrap();
|
||||
let fn_ty = self.tcx.bound_type_of(def_id).0;
|
||||
let fn_ty = self.tcx.type_of(def_id).0;
|
||||
if !fn_ty.is_fn() {
|
||||
return;
|
||||
}
|
||||
|
@ -776,9 +776,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
let def_kind = self.tcx.def_kind(def_id);
|
||||
|
||||
let item_ty = if let DefKind::Variant = def_kind {
|
||||
self.tcx.bound_type_of(self.tcx.parent(def_id))
|
||||
self.tcx.type_of(self.tcx.parent(def_id))
|
||||
} else {
|
||||
self.tcx.bound_type_of(def_id)
|
||||
self.tcx.type_of(def_id)
|
||||
};
|
||||
let substs = self.fresh_substs_for_item(span, def_id);
|
||||
let ty = item_ty.subst(self.tcx, substs);
|
||||
@ -1130,8 +1130,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
.unwrap_or(false);
|
||||
|
||||
let (res, self_ctor_substs) = if let Res::SelfCtor(impl_def_id) = res {
|
||||
let ty =
|
||||
self.handle_raw_ty(span, tcx.at(span).bound_type_of(impl_def_id).subst_identity());
|
||||
let ty = self.handle_raw_ty(span, tcx.at(span).type_of(impl_def_id).subst_identity());
|
||||
match ty.normalized.ty_adt_def() {
|
||||
Some(adt_def) if adt_def.has_ctor() => {
|
||||
let (ctor_kind, ctor_def_id) = adt_def.non_enum_variant().ctor.unwrap();
|
||||
@ -1229,7 +1228,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
let tcx = self.fcx.tcx();
|
||||
self.fcx
|
||||
.ct_infer(
|
||||
tcx.bound_type_of(param.def_id).subst_identity(),
|
||||
tcx.type_of(param.def_id).subst_identity(),
|
||||
Some(param),
|
||||
inf.span,
|
||||
)
|
||||
@ -1255,7 +1254,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// If we have a default, then we it doesn't matter that we're not
|
||||
// inferring the type arguments: we provide the default where any
|
||||
// is missing.
|
||||
tcx.bound_type_of(param.def_id).subst(tcx, substs.unwrap()).into()
|
||||
tcx.type_of(param.def_id).subst(tcx, substs.unwrap()).into()
|
||||
} else {
|
||||
// If no type arguments were provided, we have to infer them.
|
||||
// This case also occurs as a result of some malformed input, e.g.
|
||||
@ -1303,7 +1302,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
|
||||
// Substitute the values for the type parameters into the type of
|
||||
// the referenced item.
|
||||
let ty = tcx.bound_type_of(def_id);
|
||||
let ty = tcx.type_of(def_id);
|
||||
assert!(!substs.has_escaping_bound_vars());
|
||||
assert!(!ty.0.has_escaping_bound_vars());
|
||||
let ty_substituted = self.normalize(span, ty.subst(tcx, substs));
|
||||
@ -1314,7 +1313,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// type parameters, which we can infer by unifying the provided `Self`
|
||||
// with the substituted impl type.
|
||||
// This also occurs for an enum variant on a type alias.
|
||||
let impl_ty = self.normalize(span, tcx.bound_type_of(impl_def_id).subst(tcx, substs));
|
||||
let impl_ty = self.normalize(span, tcx.type_of(impl_def_id).subst(tcx, substs));
|
||||
let self_ty = self.normalize(span, self_ty);
|
||||
match self.at(&self.misc(span), self.param_env).eq(impl_ty, self_ty) {
|
||||
Ok(ok) => self.register_infer_ok_obligations(ok),
|
||||
|
@ -312,10 +312,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// same rules that check_expr_struct uses for macro hygiene.
|
||||
if self.tcx.adjust_ident(expr_field.ident, variant_def_id) == field.ident(self.tcx)
|
||||
{
|
||||
return Some((
|
||||
expr_field.expr,
|
||||
self.tcx.bound_type_of(field.did).subst_identity(),
|
||||
));
|
||||
return Some((expr_field.expr, self.tcx.type_of(field.did).subst_identity()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -342,7 +339,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
receiver: Option<&'tcx hir::Expr<'tcx>>,
|
||||
args: &'tcx [hir::Expr<'tcx>],
|
||||
) -> bool {
|
||||
let ty = self.tcx.bound_type_of(def_id).subst_identity();
|
||||
let ty = self.tcx.type_of(def_id).subst_identity();
|
||||
if !ty.is_fn() {
|
||||
return false;
|
||||
}
|
||||
|
@ -1378,7 +1378,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// Same item
|
||||
return false;
|
||||
}
|
||||
let item_ty = self.tcx.bound_type_of(item.def_id).subst_identity();
|
||||
let item_ty = self.tcx.type_of(item.def_id).subst_identity();
|
||||
// FIXME(compiler-errors): This check is *so* rudimentary
|
||||
if item_ty.needs_subst() {
|
||||
return false;
|
||||
|
@ -154,7 +154,7 @@ fn typeck_const_arg<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
(did, param_did): (LocalDefId, DefId),
|
||||
) -> &ty::TypeckResults<'tcx> {
|
||||
let fallback = move || tcx.bound_type_of(param_did).subst_identity();
|
||||
let fallback = move || tcx.type_of(param_did).subst_identity();
|
||||
typeck_with_fallback(tcx, did, fallback)
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@ fn typeck<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> &ty::TypeckResults<'tc
|
||||
if let Some(param_did) = tcx.opt_const_param_of(def_id) {
|
||||
tcx.typeck_const_arg((def_id, param_did))
|
||||
} else {
|
||||
let fallback = move || tcx.bound_type_of(def_id.to_def_id()).subst_identity();
|
||||
let fallback = move || tcx.type_of(def_id.to_def_id()).subst_identity();
|
||||
typeck_with_fallback(tcx, def_id, fallback)
|
||||
}
|
||||
}
|
||||
|
@ -386,7 +386,7 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
|
||||
let tcx = self.cfcx.tcx();
|
||||
self.cfcx
|
||||
.ct_infer(
|
||||
tcx.bound_type_of(param.def_id).subst_identity(),
|
||||
tcx.type_of(param.def_id).subst_identity(),
|
||||
Some(param),
|
||||
inf.span,
|
||||
)
|
||||
|
@ -1940,7 +1940,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
|
||||
&self,
|
||||
impl_def_id: DefId,
|
||||
) -> (ty::EarlyBinder<Ty<'tcx>>, SubstsRef<'tcx>) {
|
||||
(self.tcx.bound_type_of(impl_def_id), self.fresh_item_substs(impl_def_id))
|
||||
(self.tcx.type_of(impl_def_id), self.fresh_item_substs(impl_def_id))
|
||||
}
|
||||
|
||||
fn fresh_item_substs(&self, def_id: DefId) -> SubstsRef<'tcx> {
|
||||
@ -1958,8 +1958,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
|
||||
kind: ConstVariableOriginKind::SubstitutionPlaceholder,
|
||||
span,
|
||||
};
|
||||
self.next_const_var(self.tcx.bound_type_of(param.def_id).subst_identity(), origin)
|
||||
.into()
|
||||
self.next_const_var(self.tcx.type_of(param.def_id).subst_identity(), origin).into()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -906,13 +906,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// different from the received one
|
||||
// So we avoid suggestion method with Box<Self>
|
||||
// for instance
|
||||
self.tcx.at(span).bound_type_of(*def_id).subst_identity()
|
||||
self.tcx.at(span).type_of(*def_id).subst_identity()
|
||||
!= rcvr_ty
|
||||
&& self
|
||||
.tcx
|
||||
.at(span)
|
||||
.bound_type_of(*def_id)
|
||||
.subst_identity()
|
||||
&& self.tcx.at(span).type_of(*def_id).subst_identity()
|
||||
!= rcvr_ty
|
||||
}
|
||||
(Mode::Path, false, _) => true,
|
||||
@ -935,7 +931,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
.map(|impl_item| {
|
||||
format!(
|
||||
"- `{}`",
|
||||
self.tcx.at(span).bound_type_of(*impl_item).subst_identity()
|
||||
self.tcx.at(span).type_of(*impl_item).subst_identity()
|
||||
)
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
@ -1113,7 +1109,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
None
|
||||
};
|
||||
|
||||
let impl_ty = self.tcx.at(span).bound_type_of(impl_did).subst_identity();
|
||||
let impl_ty = self.tcx.at(span).type_of(impl_did).subst_identity();
|
||||
|
||||
let insertion = match self.tcx.impl_trait_ref(impl_did) {
|
||||
None => String::new(),
|
||||
@ -1242,7 +1238,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// When the "method" is resolved through dereferencing, we really want the
|
||||
// original type that has the associated function for accurate suggestions.
|
||||
// (#61411)
|
||||
let impl_ty = self.tcx.bound_type_of(*impl_did).subst_identity();
|
||||
let impl_ty = self.tcx.type_of(*impl_did).subst_identity();
|
||||
let target_ty = self
|
||||
.autoderef(sugg_span, rcvr_ty)
|
||||
.find(|(rcvr_ty, _)| {
|
||||
@ -1462,8 +1458,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
}
|
||||
|
||||
let range_def_id = self.tcx.require_lang_item(lang_item.unwrap(), None);
|
||||
let range_ty =
|
||||
self.tcx.bound_type_of(range_def_id).subst(self.tcx, &[actual.into()]);
|
||||
let range_ty = self.tcx.type_of(range_def_id).subst(self.tcx, &[actual.into()]);
|
||||
|
||||
let pick = self.lookup_probe_for_diagnostic(
|
||||
item_name,
|
||||
|
@ -1062,7 +1062,7 @@ impl<'a, 'tcx> FindInferSourceVisitor<'a, 'tcx> {
|
||||
|
||||
let parent_def_id = generics.parent.unwrap();
|
||||
if let DefKind::Impl { .. } = tcx.def_kind(parent_def_id) {
|
||||
let parent_ty = tcx.bound_type_of(parent_def_id).subst(tcx, substs);
|
||||
let parent_ty = tcx.type_of(parent_def_id).subst(tcx, substs);
|
||||
match (parent_ty.kind(), &ty.kind) {
|
||||
(
|
||||
ty::Adt(def, substs),
|
||||
|
@ -72,7 +72,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
||||
};
|
||||
|
||||
// Next, let's figure out the set of trait objects with implicit static bounds
|
||||
let ty = self.tcx().bound_type_of(*impl_def_id).subst_identity();
|
||||
let ty = self.tcx().type_of(*impl_def_id).subst_identity();
|
||||
let mut v = super::static_impl_trait::TraitObjectVisitor(FxIndexSet::default());
|
||||
v.visit_ty(ty);
|
||||
let mut traits = vec![];
|
||||
|
@ -123,7 +123,7 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
||||
br: ty::BoundRegionKind,
|
||||
hir_sig: &hir::FnSig<'_>,
|
||||
) -> Option<Span> {
|
||||
let fn_ty = self.tcx().bound_type_of(scope_def_id).subst_identity();
|
||||
let fn_ty = self.tcx().type_of(scope_def_id).subst_identity();
|
||||
if let ty::FnDef(_, _) = fn_ty.kind() {
|
||||
let ret_ty = fn_ty.fn_sig(self.tcx()).output();
|
||||
let span = hir_sig.decl.output.span();
|
||||
|
@ -577,7 +577,7 @@ fn foo(&self) -> Self::T { String::new() }
|
||||
if let hir::Defaultness::Default { has_value: true } =
|
||||
tcx.impl_defaultness(item.id.owner_id)
|
||||
{
|
||||
let assoc_ty = tcx.bound_type_of(item.id.owner_id).subst_identity();
|
||||
let assoc_ty = tcx.type_of(item.id.owner_id).subst_identity();
|
||||
if self.infcx.can_eq(param_env, assoc_ty, found) {
|
||||
diag.span_label(
|
||||
item.span,
|
||||
@ -598,7 +598,7 @@ fn foo(&self) -> Self::T { String::new() }
|
||||
})) => {
|
||||
for item in &items[..] {
|
||||
if let hir::AssocItemKind::Type = item.kind {
|
||||
let assoc_ty = tcx.bound_type_of(item.id.owner_id).subst_identity();
|
||||
let assoc_ty = tcx.type_of(item.id.owner_id).subst_identity();
|
||||
|
||||
if self.infcx.can_eq(param_env, assoc_ty, found) {
|
||||
diag.span_label(item.span, "expected this associated type");
|
||||
|
@ -1167,7 +1167,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
||||
val: ConstVariableValue::Unknown { universe: self.universe() },
|
||||
});
|
||||
self.tcx
|
||||
.mk_const(const_var_id, self.tcx.bound_type_of(param.def_id).subst_identity())
|
||||
.mk_const(const_var_id, self.tcx.type_of(param.def_id).subst_identity())
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
@ -182,11 +182,9 @@ impl<'tcx> LateLintPass<'tcx> for BoxPointers {
|
||||
| hir::ItemKind::TyAlias(..)
|
||||
| hir::ItemKind::Enum(..)
|
||||
| hir::ItemKind::Struct(..)
|
||||
| hir::ItemKind::Union(..) => self.check_heap_type(
|
||||
cx,
|
||||
it.span,
|
||||
cx.tcx.bound_type_of(it.owner_id).subst_identity(),
|
||||
),
|
||||
| hir::ItemKind::Union(..) => {
|
||||
self.check_heap_type(cx, it.span, cx.tcx.type_of(it.owner_id).subst_identity())
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
|
||||
@ -197,7 +195,7 @@ impl<'tcx> LateLintPass<'tcx> for BoxPointers {
|
||||
self.check_heap_type(
|
||||
cx,
|
||||
field.span,
|
||||
cx.tcx.bound_type_of(field.def_id).subst_identity(),
|
||||
cx.tcx.type_of(field.def_id).subst_identity(),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -595,7 +593,7 @@ impl<'tcx> LateLintPass<'tcx> for MissingDoc {
|
||||
// If the method is an impl for an item with docs_hidden, don't doc.
|
||||
MethodLateContext::PlainImpl => {
|
||||
let parent = cx.tcx.hir().get_parent_item(impl_item.hir_id());
|
||||
let impl_ty = cx.tcx.bound_type_of(parent).subst_identity();
|
||||
let impl_ty = cx.tcx.type_of(parent).subst_identity();
|
||||
let outerdef = match impl_ty.kind() {
|
||||
ty::Adt(def, _) => Some(def.did()),
|
||||
ty::Foreign(def_id) => Some(*def_id),
|
||||
@ -704,7 +702,7 @@ impl<'tcx> LateLintPass<'tcx> for MissingCopyImplementations {
|
||||
// and recommending Copy might be a bad idea.
|
||||
for field in def.all_fields() {
|
||||
let did = field.did;
|
||||
if cx.tcx.bound_type_of(did).subst_identity().is_unsafe_ptr() {
|
||||
if cx.tcx.type_of(did).subst_identity().is_unsafe_ptr() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -804,7 +802,7 @@ impl<'tcx> LateLintPass<'tcx> for MissingDebugImplementations {
|
||||
if self.impling_types.is_none() {
|
||||
let mut impls = LocalDefIdSet::default();
|
||||
cx.tcx.for_each_impl(debug, |d| {
|
||||
if let Some(ty_def) = cx.tcx.bound_type_of(d).subst_identity().ty_adt_def() {
|
||||
if let Some(ty_def) = cx.tcx.type_of(d).subst_identity().ty_adt_def() {
|
||||
if let Some(def_id) = ty_def.did().as_local() {
|
||||
impls.insert(def_id);
|
||||
}
|
||||
@ -2858,8 +2856,8 @@ impl ClashingExternDeclarations {
|
||||
structurally_same_type_impl(
|
||||
seen_types,
|
||||
cx,
|
||||
tcx.bound_type_of(a_did).subst_identity(),
|
||||
tcx.bound_type_of(b_did).subst_identity(),
|
||||
tcx.type_of(a_did).subst_identity(),
|
||||
tcx.type_of(b_did).subst_identity(),
|
||||
ckind,
|
||||
)
|
||||
},
|
||||
@ -2959,8 +2957,8 @@ impl<'tcx> LateLintPass<'tcx> for ClashingExternDeclarations {
|
||||
if let ForeignItemKind::Fn(..) = this_fi.kind {
|
||||
let tcx = cx.tcx;
|
||||
if let Some(existing_did) = self.insert(tcx, this_fi) {
|
||||
let existing_decl_ty = tcx.bound_type_of(existing_did).skip_binder();
|
||||
let this_decl_ty = tcx.bound_type_of(this_fi.owner_id).subst_identity();
|
||||
let existing_decl_ty = tcx.type_of(existing_did).skip_binder();
|
||||
let this_decl_ty = tcx.type_of(this_fi.owner_id).subst_identity();
|
||||
debug!(
|
||||
"ClashingExternDeclarations: Comparing existing {:?}: {:?} to this {:?}: {:?}",
|
||||
existing_did, existing_decl_ty, this_fi.owner_id, this_decl_ty
|
||||
|
@ -59,7 +59,7 @@ impl<'tcx> LateLintPass<'tcx> for DerefIntoDynSupertrait {
|
||||
// `Deref` is being implemented for `t`
|
||||
if let hir::ItemKind::Impl(impl_) = item.kind
|
||||
&& let Some(trait_) = &impl_.of_trait
|
||||
&& let t = cx.tcx.bound_type_of(item.owner_id).subst_identity()
|
||||
&& let t = cx.tcx.type_of(item.owner_id).subst_identity()
|
||||
&& let opt_did @ Some(did) = trait_.trait_def_id()
|
||||
&& opt_did == cx.tcx.lang_items().deref_trait()
|
||||
// `t` is `dyn t_principal`
|
||||
|
@ -216,7 +216,7 @@ fn is_ty_or_ty_ctxt(cx: &LateContext<'_>, path: &Path<'_>) -> Option<String> {
|
||||
}
|
||||
// Only lint on `&Ty` and `&TyCtxt` if it is used outside of a trait.
|
||||
Res::SelfTyAlias { alias_to: did, is_trait_impl: false, .. } => {
|
||||
if let ty::Adt(adt, substs) = cx.tcx.bound_type_of(did).subst_identity().kind() {
|
||||
if let ty::Adt(adt, substs) = cx.tcx.type_of(did).subst_identity().kind() {
|
||||
if let Some(name @ (sym::Ty | sym::TyCtxt)) = cx.tcx.get_diagnostic_name(adt.did())
|
||||
{
|
||||
// NOTE: This path is currently unreachable as `Ty<'tcx>` is
|
||||
|
@ -50,7 +50,7 @@ fn path_for_pass_by_value(cx: &LateContext<'_>, ty: &hir::Ty<'_>) -> Option<Stri
|
||||
return Some(format!("{}{}", name, gen_args(cx, path_segment)));
|
||||
}
|
||||
Res::SelfTyAlias { alias_to: did, is_trait_impl: false, .. } => {
|
||||
if let ty::Adt(adt, substs) = cx.tcx.bound_type_of(did).subst_identity().kind() {
|
||||
if let ty::Adt(adt, substs) = cx.tcx.type_of(did).subst_identity().kind() {
|
||||
if cx.tcx.has_attr(adt.did(), sym::rustc_pass_by_value) {
|
||||
return Some(cx.tcx.def_path_str_with_substs(adt.did(), substs));
|
||||
}
|
||||
|
@ -651,7 +651,7 @@ pub fn transparent_newtype_field<'a, 'tcx>(
|
||||
) -> Option<&'a ty::FieldDef> {
|
||||
let param_env = tcx.param_env(variant.def_id);
|
||||
variant.fields.iter().find(|field| {
|
||||
let field_ty = tcx.bound_type_of(field.did).subst_identity();
|
||||
let field_ty = tcx.type_of(field.did).subst_identity();
|
||||
let is_zst = tcx.layout_of(param_env.and(field_ty)).map_or(false, |layout| layout.is_zst());
|
||||
!is_zst
|
||||
})
|
||||
@ -1240,7 +1240,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> {
|
||||
}
|
||||
|
||||
fn check_foreign_static(&mut self, id: hir::OwnerId, span: Span) {
|
||||
let ty = self.cx.tcx.bound_type_of(id).subst_identity();
|
||||
let ty = self.cx.tcx.type_of(id).subst_identity();
|
||||
self.check_type_for_ffi_and_report_errors(span, ty, true, false);
|
||||
}
|
||||
|
||||
@ -1301,7 +1301,7 @@ declare_lint_pass!(VariantSizeDifferences => [VARIANT_SIZE_DIFFERENCES]);
|
||||
impl<'tcx> LateLintPass<'tcx> for VariantSizeDifferences {
|
||||
fn check_item(&mut self, cx: &LateContext<'_>, it: &hir::Item<'_>) {
|
||||
if let hir::ItemKind::Enum(ref enum_definition, _) = it.kind {
|
||||
let t = cx.tcx.bound_type_of(it.owner_id).subst_identity();
|
||||
let t = cx.tcx.type_of(it.owner_id).subst_identity();
|
||||
let ty = cx.tcx.erase_regions(t);
|
||||
let Ok(layout) = cx.layout_of(ty) else { return };
|
||||
let Variants::Multiple {
|
||||
@ -1421,7 +1421,7 @@ impl InvalidAtomicOrdering {
|
||||
&& recognized_names.contains(&method_path.ident.name)
|
||||
&& let Some(m_def_id) = cx.typeck_results().type_dependent_def_id(expr.hir_id)
|
||||
&& let Some(impl_did) = cx.tcx.impl_of_method(m_def_id)
|
||||
&& let Some(adt) = cx.tcx.bound_type_of(impl_did).subst_identity().ty_adt_def()
|
||||
&& let Some(adt) = cx.tcx.type_of(impl_did).subst_identity().ty_adt_def()
|
||||
// skip extension traits, only lint functions from the standard library
|
||||
&& cx.tcx.trait_id_of_impl(impl_did).is_none()
|
||||
&& let parent = cx.tcx.parent(adt.did())
|
||||
|
@ -498,7 +498,7 @@ impl<'tcx> Collector<'tcx> {
|
||||
fn i686_arg_list_size(&self, item: &hir::ForeignItemRef) -> usize {
|
||||
let argument_types: &List<Ty<'_>> = self.tcx.erase_late_bound_regions(
|
||||
self.tcx
|
||||
.bound_type_of(item.id.owner_id)
|
||||
.type_of(item.id.owner_id)
|
||||
.subst_identity()
|
||||
.fn_sig(self.tcx)
|
||||
.inputs()
|
||||
|
@ -369,7 +369,7 @@ define_tables! {
|
||||
explicit_predicates_of: Table<DefIndex, LazyValue<ty::GenericPredicates<'static>>>,
|
||||
generics_of: Table<DefIndex, LazyValue<ty::Generics>>,
|
||||
super_predicates_of: Table<DefIndex, LazyValue<ty::GenericPredicates<'static>>>,
|
||||
type_of: Table<DefIndex, LazyValue<Ty<'static>>>,
|
||||
type_of: Table<DefIndex, LazyValue<ty::EarlyBinder<Ty<'static>>>>,
|
||||
variances_of: Table<DefIndex, LazyArray<ty::Variance>>,
|
||||
fn_sig: Table<DefIndex, LazyValue<ty::EarlyBinder<ty::PolyFnSig<'static>>>>,
|
||||
codegen_fn_attrs: Table<DefIndex, LazyValue<CodegenFnAttrs>>,
|
||||
|
@ -104,7 +104,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
self.impl_trait_ref(def_id)
|
||||
.map(|t| t.subst_identity())
|
||||
.map(ImplSubject::Trait)
|
||||
.unwrap_or_else(|| ImplSubject::Inherent(self.bound_type_of(def_id).subst_identity()))
|
||||
.unwrap_or_else(|| ImplSubject::Inherent(self.type_of(def_id).subst_identity()))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2497,7 +2497,7 @@ impl<'tcx> ConstantKind<'tcx> {
|
||||
};
|
||||
debug!("expr.kind: {:?}", expr.kind);
|
||||
|
||||
let ty = tcx.bound_type_of(def.def_id_for_type_of()).subst_identity();
|
||||
let ty = tcx.type_of(def.def_id_for_type_of()).subst_identity();
|
||||
debug!(?ty);
|
||||
|
||||
// FIXME(const_generics): We currently have to special case parameters because `min_const_generics`
|
||||
|
@ -165,7 +165,7 @@ impl<'tcx> Rvalue<'tcx> {
|
||||
tcx.mk_array_with_const_len(operand.ty(local_decls, tcx), count)
|
||||
}
|
||||
Rvalue::ThreadLocalRef(did) => {
|
||||
let static_ty = tcx.bound_type_of(did).subst_identity();
|
||||
let static_ty = tcx.type_of(did).subst_identity();
|
||||
if tcx.is_mutable_static(did) {
|
||||
tcx.mk_mut_ptr(static_ty)
|
||||
} else if tcx.is_foreign_item(did) {
|
||||
@ -202,9 +202,7 @@ impl<'tcx> Rvalue<'tcx> {
|
||||
Rvalue::Aggregate(ref ak, ref ops) => match **ak {
|
||||
AggregateKind::Array(ty) => tcx.mk_array(ty, ops.len() as u64),
|
||||
AggregateKind::Tuple => tcx.mk_tup(ops.iter().map(|op| op.ty(local_decls, tcx))),
|
||||
AggregateKind::Adt(did, _, substs, _, _) => {
|
||||
tcx.bound_type_of(did).subst(tcx, substs)
|
||||
}
|
||||
AggregateKind::Adt(did, _, substs, _, _) => tcx.type_of(did).subst(tcx, substs),
|
||||
AggregateKind::Closure(did, substs) => tcx.mk_closure(did, substs),
|
||||
AggregateKind::Generator(did, substs, movability) => {
|
||||
tcx.mk_generator(did, substs, movability)
|
||||
|
@ -152,7 +152,7 @@ rustc_queries! {
|
||||
/// to an alias, it will "skip" this alias to return the aliased type.
|
||||
///
|
||||
/// [`DefId`]: rustc_hir::def_id::DefId
|
||||
query type_of(key: DefId) -> Ty<'tcx> {
|
||||
query type_of(key: DefId) -> ty::EarlyBinder<Ty<'tcx>> {
|
||||
desc { |tcx|
|
||||
"{action} `{path}`",
|
||||
action = {
|
||||
|
@ -263,9 +263,7 @@ pub fn ancestors(
|
||||
|
||||
if let Some(reported) = specialization_graph.has_errored {
|
||||
Err(reported)
|
||||
} else if let Err(reported) =
|
||||
tcx.bound_type_of(start_from_impl).subst_identity().error_reported()
|
||||
{
|
||||
} else if let Err(reported) = tcx.type_of(start_from_impl).subst_identity().error_reported() {
|
||||
Err(reported)
|
||||
} else {
|
||||
Ok(Ancestors {
|
||||
|
@ -83,11 +83,7 @@ impl AssocItem {
|
||||
}
|
||||
ty::AssocKind::Type => format!("type {};", self.name),
|
||||
ty::AssocKind::Const => {
|
||||
format!(
|
||||
"const {}: {:?};",
|
||||
self.name,
|
||||
tcx.bound_type_of(self.def_id).subst_identity()
|
||||
)
|
||||
format!("const {}: {:?};", self.name, tcx.type_of(self.def_id).subst_identity())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ impl<'tcx> Const<'tcx> {
|
||||
let expr = &tcx.hir().body(body_id).value;
|
||||
debug!(?expr);
|
||||
|
||||
let ty = tcx.bound_type_of(def.def_id_for_type_of()).subst_identity();
|
||||
let ty = tcx.type_of(def.def_id_for_type_of()).subst_identity();
|
||||
|
||||
match Self::try_eval_lit_or_param(tcx, ty, expr) {
|
||||
Some(v) => v,
|
||||
|
@ -1149,7 +1149,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
_ => return None,
|
||||
}
|
||||
|
||||
let ret_ty = self.bound_type_of(scope_def_id).subst_identity();
|
||||
let ret_ty = self.type_of(scope_def_id).subst_identity();
|
||||
match ret_ty.kind() {
|
||||
ty::FnDef(_, _) => {
|
||||
let sig = ret_ty.fn_sig(self);
|
||||
@ -1189,7 +1189,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
pub fn caller_location_ty(self) -> Ty<'tcx> {
|
||||
self.mk_imm_ref(
|
||||
self.lifetimes.re_static,
|
||||
self.bound_type_of(self.require_lang_item(LangItem::PanicLocation, None))
|
||||
self.type_of(self.require_lang_item(LangItem::PanicLocation, None))
|
||||
.subst(self, self.mk_substs([self.lifetimes.re_static.into()].iter())),
|
||||
)
|
||||
}
|
||||
@ -1754,7 +1754,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
ty_param.into()
|
||||
} else {
|
||||
assert!(has_default);
|
||||
self.bound_type_of(param.def_id).subst(self, substs).into()
|
||||
self.type_of(param.def_id).subst(self, substs).into()
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -2002,7 +2002,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
GenericParamDefKind::Const { .. } => self
|
||||
.mk_const(
|
||||
ParamConst { index: param.index, name: param.name },
|
||||
self.bound_type_of(param.def_id).subst_identity(),
|
||||
self.type_of(param.def_id).subst_identity(),
|
||||
)
|
||||
.into(),
|
||||
}
|
||||
|
@ -481,7 +481,7 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for IsSuggestableVisitor<'tcx> {
|
||||
|
||||
Alias(Opaque, AliasTy { def_id, .. }) => {
|
||||
let parent = self.tcx.parent(def_id);
|
||||
let parent_ty = self.tcx.bound_type_of(parent).subst_identity();
|
||||
let parent_ty = self.tcx.type_of(parent).subst_identity();
|
||||
if let DefKind::TyAlias | DefKind::AssocTy = self.tcx.def_kind(parent)
|
||||
&& let Alias(Opaque, AliasTy { def_id: parent_opaque_def_id, .. }) = *parent_ty.kind()
|
||||
&& parent_opaque_def_id == def_id
|
||||
@ -565,7 +565,7 @@ impl<'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for MakeSuggestableFolder<'tcx> {
|
||||
|
||||
Alias(Opaque, AliasTy { def_id, .. }) => {
|
||||
let parent = self.tcx.parent(def_id);
|
||||
let parent_ty = self.tcx.bound_type_of(parent).subst_identity();
|
||||
let parent_ty = self.tcx.type_of(parent).subst_identity();
|
||||
if let hir::def::DefKind::TyAlias | hir::def::DefKind::AssocTy = self.tcx.def_kind(parent)
|
||||
&& let Alias(Opaque, AliasTy { def_id: parent_opaque_def_id, .. }) = *parent_ty.kind()
|
||||
&& parent_opaque_def_id == def_id
|
||||
|
@ -85,7 +85,7 @@ impl GenericParamDef {
|
||||
) -> Option<EarlyBinder<ty::GenericArg<'tcx>>> {
|
||||
match self.kind {
|
||||
GenericParamDefKind::Type { has_default, .. } if has_default => {
|
||||
Some(tcx.bound_type_of(self.def_id).map_bound(|t| t.into()))
|
||||
Some(tcx.type_of(self.def_id).map_bound(|t| t.into()))
|
||||
}
|
||||
GenericParamDefKind::Const { has_default } if has_default => {
|
||||
Some(tcx.const_param_default(self.def_id).map_bound(|c| c.into()))
|
||||
@ -103,7 +103,7 @@ impl GenericParamDef {
|
||||
ty::GenericParamDefKind::Lifetime => tcx.mk_re_error_misc().into(),
|
||||
ty::GenericParamDefKind::Type { .. } => tcx.ty_error().into(),
|
||||
ty::GenericParamDefKind::Const { .. } => {
|
||||
tcx.const_error(tcx.bound_type_of(self.def_id).subst(tcx, preceding_substs)).into()
|
||||
tcx.const_error(tcx.type_of(self.def_id).subst(tcx, preceding_substs)).into()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ impl<'tcx> VariantDef {
|
||||
InhabitedPredicate::all(
|
||||
tcx,
|
||||
self.fields.iter().map(|field| {
|
||||
let pred = tcx.bound_type_of(field.did).subst_identity().inhabited_predicate(tcx);
|
||||
let pred = tcx.type_of(field.did).subst_identity().inhabited_predicate(tcx);
|
||||
if adt.is_enum() {
|
||||
return pred;
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ impl<'tcx> Instance<'tcx> {
|
||||
/// Returns the `Ty` corresponding to this `Instance`, with generic substitutions applied and
|
||||
/// lifetimes erased, allowing a `ParamEnv` to be specified for use during normalization.
|
||||
pub fn ty(&self, tcx: TyCtxt<'tcx>, param_env: ty::ParamEnv<'tcx>) -> Ty<'tcx> {
|
||||
let ty = tcx.bound_type_of(self.def.def_id());
|
||||
let ty = tcx.type_of(self.def.def_id());
|
||||
tcx.subst_and_normalize_erasing_regions(self.substs, param_env, ty.skip_binder())
|
||||
}
|
||||
|
||||
@ -662,7 +662,7 @@ fn polymorphize<'tcx>(
|
||||
let def_id = instance.def_id();
|
||||
let upvars_ty = if tcx.is_closure(def_id) {
|
||||
Some(substs.as_closure().tupled_upvars_ty())
|
||||
} else if tcx.bound_type_of(def_id).skip_binder().is_generator() {
|
||||
} else if tcx.type_of(def_id).skip_binder().is_generator() {
|
||||
Some(substs.as_generator().tupled_upvars_ty())
|
||||
} else {
|
||||
None
|
||||
|
@ -2017,7 +2017,7 @@ impl<'tcx> FieldDef {
|
||||
/// Returns the type of this field. The resulting type is not normalized. The `subst` is
|
||||
/// typically obtained via the second field of [`TyKind::Adt`].
|
||||
pub fn ty(&self, tcx: TyCtxt<'tcx>, subst: SubstsRef<'tcx>) -> Ty<'tcx> {
|
||||
tcx.bound_type_of(self.did).subst(tcx, subst)
|
||||
tcx.type_of(self.did).subst(tcx, subst)
|
||||
}
|
||||
|
||||
/// Computes the `Ident` of this variant by looking up the `Span`
|
||||
|
@ -115,7 +115,7 @@ pub trait Printer<'tcx>: Sized {
|
||||
|
||||
DefPathData::Impl => {
|
||||
let generics = self.tcx().generics_of(def_id);
|
||||
let self_ty = self.tcx().bound_type_of(def_id);
|
||||
let self_ty = self.tcx().type_of(def_id);
|
||||
let impl_trait_ref = self.tcx().impl_trait_ref(def_id);
|
||||
let (self_ty, impl_trait_ref) = if substs.len() >= generics.count() {
|
||||
(
|
||||
|
@ -754,7 +754,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||
// NOTE: I know we should check for NO_QUERIES here, but it's alright.
|
||||
// `type_of` on a type alias or assoc type should never cause a cycle.
|
||||
if let ty::Alias(ty::Opaque, ty::AliasTy { def_id: d, .. }) =
|
||||
*self.tcx().bound_type_of(parent).subst_identity().kind()
|
||||
*self.tcx().type_of(parent).subst_identity().kind()
|
||||
{
|
||||
if d == def_id {
|
||||
// If the type alias directly starts with the `impl` of the
|
||||
|
@ -435,10 +435,6 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
self.opt_def_kind(def_id)
|
||||
.unwrap_or_else(|| bug!("def_kind: unsupported node: {:?}", def_id))
|
||||
}
|
||||
|
||||
pub fn bound_type_of(self, def_id: impl IntoQueryParam<DefId>) -> ty::EarlyBinder<Ty<'tcx>> {
|
||||
ty::EarlyBinder(self.type_of(def_id))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> TyCtxtAt<'tcx> {
|
||||
@ -447,8 +443,4 @@ impl<'tcx> TyCtxtAt<'tcx> {
|
||||
self.opt_def_kind(def_id)
|
||||
.unwrap_or_else(|| bug!("def_kind: unsupported node: {:?}", def_id))
|
||||
}
|
||||
|
||||
pub fn bound_type_of(self, def_id: impl IntoQueryParam<DefId>) -> ty::EarlyBinder<Ty<'tcx>> {
|
||||
ty::EarlyBinder(self.type_of(def_id))
|
||||
}
|
||||
}
|
||||
|
@ -163,8 +163,7 @@ pub fn relate_substs_with_variances<'tcx, R: TypeRelation<'tcx>>(
|
||||
let params = iter::zip(a_subst, b_subst).enumerate().map(|(i, (a, b))| {
|
||||
let variance = variances[i];
|
||||
let variance_info = if variance == ty::Invariant && fetch_ty_for_diag {
|
||||
let ty =
|
||||
*cached_ty.get_or_insert_with(|| tcx.bound_type_of(ty_def_id).subst(tcx, a_subst));
|
||||
let ty = *cached_ty.get_or_insert_with(|| tcx.type_of(ty_def_id).subst(tcx, a_subst));
|
||||
ty::VarianceDiagInfo::Invariant { ty, param_index: i.try_into().unwrap() }
|
||||
} else {
|
||||
ty::VarianceDiagInfo::default()
|
||||
|
@ -2268,7 +2268,7 @@ impl<'tcx> Ty<'tcx> {
|
||||
ty::Str | ty::Slice(_) => (tcx.types.usize, false),
|
||||
ty::Dynamic(..) => {
|
||||
let dyn_metadata = tcx.require_lang_item(LangItem::DynMetadata, None);
|
||||
(tcx.bound_type_of(dyn_metadata).subst(tcx, &[tail.into()]), false)
|
||||
(tcx.type_of(dyn_metadata).subst(tcx, &[tail.into()]), false)
|
||||
},
|
||||
|
||||
// type parameters only have unit metadata if they're sized, so return true
|
||||
|
@ -225,7 +225,7 @@ pub(super) fn trait_impls_of_provider(tcx: TyCtxt<'_>, trait_id: DefId) -> Trait
|
||||
for &impl_def_id in tcx.hir().trait_impls(trait_id) {
|
||||
let impl_def_id = impl_def_id.to_def_id();
|
||||
|
||||
let impl_self_ty = tcx.bound_type_of(impl_def_id).subst_identity();
|
||||
let impl_self_ty = tcx.type_of(impl_def_id).subst_identity();
|
||||
if impl_self_ty.references_error() {
|
||||
continue;
|
||||
}
|
||||
|
@ -362,7 +362,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
let drop_trait = self.lang_items().drop_trait()?;
|
||||
self.ensure().coherent_trait(drop_trait);
|
||||
|
||||
let ty = self.bound_type_of(adt_did).subst_identity();
|
||||
let ty = self.type_of(adt_did).subst_identity();
|
||||
let (did, constness) = self.find_map_relevant_impl(drop_trait, ty, |impl_did| {
|
||||
if let Some(item_id) = self.associated_item_def_ids(impl_did).first() {
|
||||
if validate(self, impl_did).is_ok() {
|
||||
@ -415,12 +415,12 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
// <P1, P2, P0>, and then look up which of the impl substs refer to
|
||||
// parameters marked as pure.
|
||||
|
||||
let impl_substs = match *self.bound_type_of(impl_def_id).subst_identity().kind() {
|
||||
let impl_substs = match *self.type_of(impl_def_id).subst_identity().kind() {
|
||||
ty::Adt(def_, substs) if def_ == def => substs,
|
||||
_ => bug!(),
|
||||
};
|
||||
|
||||
let item_substs = match *self.bound_type_of(def.did()).subst_identity().kind() {
|
||||
let item_substs = match *self.type_of(def.did()).subst_identity().kind() {
|
||||
ty::Adt(def_, substs) if def_ == def => substs,
|
||||
_ => bug!(),
|
||||
};
|
||||
@ -604,7 +604,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
// Make sure that any constants in the static's type are evaluated.
|
||||
let static_ty = self.normalize_erasing_regions(
|
||||
ty::ParamEnv::empty(),
|
||||
self.bound_type_of(def_id).subst_identity(),
|
||||
self.type_of(def_id).subst_identity(),
|
||||
);
|
||||
|
||||
// Make sure that accesses to unsafe statics end up using raw pointers.
|
||||
@ -793,7 +793,7 @@ impl<'tcx> OpaqueTypeExpander<'tcx> {
|
||||
let expanded_ty = match self.expanded_cache.get(&(def_id, substs)) {
|
||||
Some(expanded_ty) => *expanded_ty,
|
||||
None => {
|
||||
let generic_ty = self.tcx.bound_type_of(def_id);
|
||||
let generic_ty = self.tcx.type_of(def_id);
|
||||
let concrete_ty = generic_ty.subst(self.tcx, substs);
|
||||
let expanded_ty = self.fold_ty(concrete_ty);
|
||||
self.expanded_cache.insert((def_id, substs), expanded_ty);
|
||||
|
@ -643,7 +643,7 @@ fn construct_error(
|
||||
let num_params = match body_owner_kind {
|
||||
hir::BodyOwnerKind::Fn => tcx.fn_sig(def).skip_binder().inputs().skip_binder().len(),
|
||||
hir::BodyOwnerKind::Closure => {
|
||||
let ty = tcx.bound_type_of(def).subst_identity();
|
||||
let ty = tcx.type_of(def).subst_identity();
|
||||
match ty.kind() {
|
||||
ty::Closure(_, substs) => {
|
||||
1 + substs.as_closure().sig().inputs().skip_binder().len()
|
||||
|
@ -193,7 +193,7 @@ impl<'tcx> Cx<'tcx> {
|
||||
let va_list_did = self.tcx.require_lang_item(LangItem::VaList, Some(param.span));
|
||||
|
||||
self.tcx
|
||||
.bound_type_of(va_list_did)
|
||||
.type_of(va_list_did)
|
||||
.subst(self.tcx, &[self.tcx.lifetimes.re_erased.into()])
|
||||
} else {
|
||||
fn_sig.inputs()[index]
|
||||
|
@ -41,7 +41,7 @@ impl<'tcx> MirPass<'tcx> for AbortUnwindingCalls {
|
||||
//
|
||||
// Here we test for this function itself whether its ABI allows
|
||||
// unwinding or not.
|
||||
let body_ty = tcx.bound_type_of(def_id).skip_binder();
|
||||
let body_ty = tcx.type_of(def_id).skip_binder();
|
||||
let body_abi = match body_ty.kind() {
|
||||
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
||||
ty::Closure(..) => Abi::RustCall,
|
||||
|
@ -82,7 +82,7 @@ impl<'tcx> MirPass<'tcx> for ConstProp {
|
||||
return;
|
||||
}
|
||||
|
||||
let is_generator = tcx.bound_type_of(def_id.to_def_id()).subst_identity().is_generator();
|
||||
let is_generator = tcx.type_of(def_id.to_def_id()).subst_identity().is_generator();
|
||||
// FIXME(welseywiser) const prop doesn't work on generators because of query cycles
|
||||
// computing their layout.
|
||||
if is_generator {
|
||||
|
@ -57,7 +57,7 @@ impl<'tcx> MirLint<'tcx> for ConstProp {
|
||||
return;
|
||||
}
|
||||
|
||||
let is_generator = tcx.bound_type_of(def_id.to_def_id()).subst_identity().is_generator();
|
||||
let is_generator = tcx.type_of(def_id.to_def_id()).subst_identity().is_generator();
|
||||
// FIXME(welseywiser) const prop doesn't work on generators because of query cycles
|
||||
// computing their layout.
|
||||
if is_generator {
|
||||
|
@ -163,7 +163,7 @@ pub fn deduced_param_attrs<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> &'tcx [Ded
|
||||
|
||||
// Codegen won't use this information for anything if all the function parameters are passed
|
||||
// directly. Detect that and bail, for compilation speed.
|
||||
let fn_ty = tcx.bound_type_of(def_id).subst_identity();
|
||||
let fn_ty = tcx.type_of(def_id).subst_identity();
|
||||
if matches!(fn_ty.kind(), ty::FnDef(..)) {
|
||||
if fn_ty
|
||||
.fn_sig(tcx)
|
||||
|
@ -18,8 +18,8 @@ pub fn build_ptr_tys<'tcx>(
|
||||
nonnull_did: DefId,
|
||||
) -> (Ty<'tcx>, Ty<'tcx>, Ty<'tcx>) {
|
||||
let substs = tcx.intern_substs(&[pointee.into()]);
|
||||
let unique_ty = tcx.bound_type_of(unique_did).subst(tcx, substs);
|
||||
let nonnull_ty = tcx.bound_type_of(nonnull_did).subst(tcx, substs);
|
||||
let unique_ty = tcx.type_of(unique_did).subst(tcx, substs);
|
||||
let nonnull_ty = tcx.type_of(nonnull_did).subst(tcx, substs);
|
||||
let ptr_ty = tcx.mk_imm_ptr(pointee);
|
||||
|
||||
(unique_ty, nonnull_ty, ptr_ty)
|
||||
@ -93,7 +93,7 @@ impl<'tcx> MirPass<'tcx> for ElaborateBoxDerefs {
|
||||
if let Some(def_id) = tcx.lang_items().owned_box() {
|
||||
let unique_did = tcx.adt_def(def_id).non_enum_variant().fields[0].did;
|
||||
|
||||
let Some(nonnull_def) = tcx.bound_type_of(unique_did).subst_identity().ty_adt_def() else {
|
||||
let Some(nonnull_def) = tcx.type_of(unique_did).subst_identity().ty_adt_def() else {
|
||||
span_bug!(tcx.def_span(unique_did), "expected Box to contain Unique")
|
||||
};
|
||||
|
||||
|
@ -49,7 +49,7 @@ fn has_ffi_unwind_calls(tcx: TyCtxt<'_>, local_def_id: LocalDefId) -> bool {
|
||||
|
||||
let body = &*tcx.mir_built(ty::WithOptConstParam::unknown(local_def_id)).borrow();
|
||||
|
||||
let body_ty = tcx.bound_type_of(def_id).skip_binder();
|
||||
let body_ty = tcx.type_of(def_id).skip_binder();
|
||||
let body_abi = match body_ty.kind() {
|
||||
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
|
||||
ty::Closure(..) => Abi::RustCall,
|
||||
|
@ -900,7 +900,7 @@ impl<'tcx> Visitor<'tcx> for CostChecker<'_, 'tcx> {
|
||||
|
||||
let kind = match parent_ty.ty.kind() {
|
||||
&ty::Alias(ty::Opaque, ty::AliasTy { def_id, substs, .. }) => {
|
||||
self.tcx.bound_type_of(def_id).subst(self.tcx, substs).kind()
|
||||
self.tcx.type_of(def_id).subst(self.tcx, substs).kind()
|
||||
}
|
||||
kind => kind,
|
||||
};
|
||||
|
@ -13,7 +13,7 @@ impl<'tcx> MirPass<'tcx> for RemoveZsts {
|
||||
|
||||
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
||||
// Avoid query cycles (generators require optimized MIR for layout).
|
||||
if tcx.bound_type_of(body.source.def_id()).subst_identity().is_generator() {
|
||||
if tcx.type_of(body.source.def_id()).subst_identity().is_generator() {
|
||||
return;
|
||||
}
|
||||
let param_env = tcx.param_env(body.source.def_id());
|
||||
|
@ -692,7 +692,7 @@ fn build_call_shim<'tcx>(
|
||||
|
||||
// `FnDef` call with optional receiver.
|
||||
CallKind::Direct(def_id) => {
|
||||
let ty = tcx.bound_type_of(def_id).subst_identity();
|
||||
let ty = tcx.type_of(def_id).subst_identity();
|
||||
(
|
||||
Operand::Constant(Box::new(Constant {
|
||||
span,
|
||||
|
@ -1196,8 +1196,7 @@ impl<'v> RootCollector<'_, 'v> {
|
||||
{
|
||||
debug!("RootCollector: ADT drop-glue for `{id:?}`",);
|
||||
|
||||
let ty =
|
||||
self.tcx.bound_type_of(id.owner_id.to_def_id()).no_bound_vars().unwrap();
|
||||
let ty = self.tcx.type_of(id.owner_id.to_def_id()).no_bound_vars().unwrap();
|
||||
visit_drop_use(self.tcx, ty, true, DUMMY_SP, self.output);
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ fn characteristic_def_id_of_mono_item<'tcx>(
|
||||
let impl_self_ty = tcx.subst_and_normalize_erasing_regions(
|
||||
instance.substs,
|
||||
ty::ParamEnv::reveal_all(),
|
||||
tcx.bound_type_of(impl_def_id).skip_binder(),
|
||||
tcx.type_of(impl_def_id).skip_binder(),
|
||||
);
|
||||
if let Some(def_id) = characteristic_def_id_of_type(impl_self_ty) {
|
||||
return Some(def_id);
|
||||
|
@ -2174,7 +2174,7 @@ impl CheckAttrVisitor<'_> {
|
||||
let tcx = self.tcx;
|
||||
if target == Target::Fn {
|
||||
let Some(tokenstream) = tcx.get_diagnostic_item(sym::TokenStream) else {return};
|
||||
let tokenstream = tcx.bound_type_of(tokenstream).subst_identity();
|
||||
let tokenstream = tcx.type_of(tokenstream).subst_identity();
|
||||
|
||||
let id = hir_id.expect_owner();
|
||||
let hir_sig = tcx.hir().fn_sig_by_hir_id(hir_id).unwrap();
|
||||
|
@ -315,7 +315,7 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {
|
||||
//// This is done to handle the case where, for example, the static
|
||||
//// method of a private type is used, but the type itself is never
|
||||
//// called directly.
|
||||
let self_ty = self.tcx.bound_type_of(item).subst_identity();
|
||||
let self_ty = self.tcx.type_of(item).subst_identity();
|
||||
match *self_ty.kind() {
|
||||
ty::Adt(def, _) => self.check_def_id(def.did()),
|
||||
ty::Foreign(did) => self.check_def_id(did),
|
||||
@ -654,7 +654,7 @@ impl<'tcx> DeadVisitor<'tcx> {
|
||||
if self.live_symbols.contains(&field.did.expect_local()) {
|
||||
return ShouldWarnAboutField::No;
|
||||
}
|
||||
let field_type = self.tcx.bound_type_of(field.did).subst_identity();
|
||||
let field_type = self.tcx.type_of(field.did).subst_identity();
|
||||
if field_type.is_phantom_data() {
|
||||
return ShouldWarnAboutField::No;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ pub fn test_layout(tcx: TyCtxt<'_>) {
|
||||
fn dump_layout_of(tcx: TyCtxt<'_>, item_def_id: LocalDefId, attr: &Attribute) {
|
||||
let tcx = tcx;
|
||||
let param_env = tcx.param_env(item_def_id);
|
||||
let ty = tcx.bound_type_of(item_def_id).subst_identity();
|
||||
let ty = tcx.type_of(item_def_id).subst_identity();
|
||||
match tcx.layout_of(param_env.and(ty)) {
|
||||
Ok(ty_layout) => {
|
||||
// Check out the `#[rustc_layout(..)]` attribute to tell what to dump.
|
||||
|
@ -207,7 +207,7 @@ where
|
||||
// so we need to visit the self type additionally.
|
||||
if let Some(assoc_item) = tcx.opt_associated_item(def_id) {
|
||||
if let Some(impl_def_id) = assoc_item.impl_container(tcx) {
|
||||
tcx.bound_type_of(impl_def_id).subst_identity().visit_with(self)?;
|
||||
tcx.type_of(impl_def_id).subst_identity().visit_with(self)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -341,7 +341,7 @@ trait VisibilityLike: Sized {
|
||||
effective_visibilities: &EffectiveVisibilities,
|
||||
) -> Self {
|
||||
let mut find = FindMin { tcx, effective_visibilities, min: Self::MAX };
|
||||
find.visit(tcx.bound_type_of(def_id).subst_identity());
|
||||
find.visit(tcx.type_of(def_id).subst_identity());
|
||||
if let Some(trait_ref) = tcx.impl_trait_ref(def_id) {
|
||||
find.visit_trait(trait_ref.subst_identity());
|
||||
}
|
||||
@ -837,11 +837,11 @@ impl ReachEverythingInTheInterfaceVisitor<'_, '_> {
|
||||
GenericParamDefKind::Lifetime => {}
|
||||
GenericParamDefKind::Type { has_default, .. } => {
|
||||
if has_default {
|
||||
self.visit(self.ev.tcx.bound_type_of(param.def_id).subst_identity());
|
||||
self.visit(self.ev.tcx.type_of(param.def_id).subst_identity());
|
||||
}
|
||||
}
|
||||
GenericParamDefKind::Const { has_default } => {
|
||||
self.visit(self.ev.tcx.bound_type_of(param.def_id).subst_identity());
|
||||
self.visit(self.ev.tcx.type_of(param.def_id).subst_identity());
|
||||
if has_default {
|
||||
self.visit(self.ev.tcx.const_param_default(param.def_id).subst_identity());
|
||||
}
|
||||
@ -857,7 +857,7 @@ impl ReachEverythingInTheInterfaceVisitor<'_, '_> {
|
||||
}
|
||||
|
||||
fn ty(&mut self) -> &mut Self {
|
||||
self.visit(self.ev.tcx.bound_type_of(self.item_def_id).subst_identity());
|
||||
self.visit(self.ev.tcx.type_of(self.item_def_id).subst_identity());
|
||||
self
|
||||
}
|
||||
|
||||
@ -1268,7 +1268,7 @@ impl<'tcx> Visitor<'tcx> for TypePrivacyVisitor<'tcx> {
|
||||
// Method calls have to be checked specially.
|
||||
self.span = segment.ident.span;
|
||||
if let Some(def_id) = self.typeck_results().type_dependent_def_id(expr.hir_id) {
|
||||
if self.visit(self.tcx.bound_type_of(def_id).subst_identity()).is_break() {
|
||||
if self.visit(self.tcx.type_of(def_id).subst_identity()).is_break() {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
@ -1742,12 +1742,12 @@ impl SearchInterfaceForPrivateItemsVisitor<'_> {
|
||||
GenericParamDefKind::Lifetime => {}
|
||||
GenericParamDefKind::Type { has_default, .. } => {
|
||||
if has_default {
|
||||
self.visit(self.tcx.bound_type_of(param.def_id).subst_identity());
|
||||
self.visit(self.tcx.type_of(param.def_id).subst_identity());
|
||||
}
|
||||
}
|
||||
// FIXME(generic_const_exprs): May want to look inside const here
|
||||
GenericParamDefKind::Const { .. } => {
|
||||
self.visit(self.tcx.bound_type_of(param.def_id).subst_identity());
|
||||
self.visit(self.tcx.type_of(param.def_id).subst_identity());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1774,7 +1774,7 @@ impl SearchInterfaceForPrivateItemsVisitor<'_> {
|
||||
}
|
||||
|
||||
fn ty(&mut self) -> &mut Self {
|
||||
self.visit(self.tcx.bound_type_of(self.item_def_id).subst_identity());
|
||||
self.visit(self.tcx.type_of(self.item_def_id).subst_identity());
|
||||
self
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ pub(super) fn mangle<'tcx>(
|
||||
let key = tcx.def_key(ty_def_id);
|
||||
match key.disambiguated_data.data {
|
||||
DefPathData::TypeNs(_) | DefPathData::ValueNs(_) => {
|
||||
instance_ty = tcx.bound_type_of(ty_def_id).subst_identity();
|
||||
instance_ty = tcx.type_of(ty_def_id).subst_identity();
|
||||
debug!(?instance_ty);
|
||||
break;
|
||||
}
|
||||
|
@ -696,13 +696,13 @@ fn transform_ty<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>, options: TransformTyOptio
|
||||
let variant = adt_def.non_enum_variant();
|
||||
let param_env = tcx.param_env(variant.def_id);
|
||||
let field = variant.fields.iter().find(|field| {
|
||||
let ty = tcx.bound_type_of(field.did).subst_identity();
|
||||
let ty = tcx.type_of(field.did).subst_identity();
|
||||
let is_zst =
|
||||
tcx.layout_of(param_env.and(ty)).map_or(false, |layout| layout.is_zst());
|
||||
!is_zst
|
||||
});
|
||||
if let Some(field) = field {
|
||||
let ty0 = tcx.bound_type_of(field.did).subst(tcx, substs);
|
||||
let ty0 = tcx.type_of(field.did).subst(tcx, substs);
|
||||
// Generalize any repr(transparent) user-defined type that is either a pointer
|
||||
// or reference, and either references itself or any other type that contains or
|
||||
// references itself, to avoid a reference cycle.
|
||||
|
@ -244,7 +244,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for ProjectionPredicate<'tcx> {
|
||||
|
||||
// Finally we construct the actual value of the associated type.
|
||||
let is_const = matches!(tcx.def_kind(assoc_def.item.def_id), DefKind::AssocConst);
|
||||
let ty = tcx.bound_type_of(assoc_def.item.def_id);
|
||||
let ty = tcx.type_of(assoc_def.item.def_id);
|
||||
let term: ty::EarlyBinder<ty::Term<'tcx>> = if is_const {
|
||||
let identity_substs =
|
||||
ty::InternalSubsts::identity_for_item(tcx, assoc_def.item.def_id);
|
||||
@ -388,7 +388,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for ProjectionPredicate<'tcx> {
|
||||
|
||||
ty::Dynamic(_, _, _) => {
|
||||
let dyn_metadata = tcx.require_lang_item(LangItem::DynMetadata, None);
|
||||
tcx.bound_type_of(dyn_metadata)
|
||||
tcx.type_of(dyn_metadata)
|
||||
.subst(tcx, &[ty::GenericArg::from(goal.predicate.self_ty())])
|
||||
}
|
||||
|
||||
|
@ -326,7 +326,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
|
||||
.fields
|
||||
.last()
|
||||
.expect("expected unsized ADT to have a tail field");
|
||||
let tail_field_ty = tcx.bound_type_of(tail_field.did);
|
||||
let tail_field_ty = tcx.type_of(tail_field.did);
|
||||
|
||||
let a_tail_ty = tail_field_ty.subst(tcx, a_substs);
|
||||
let b_tail_ty = tail_field_ty.subst(tcx, b_substs);
|
||||
|
@ -68,7 +68,7 @@ pub(super) fn instantiate_constituent_tys_for_auto_trait<'tcx>(
|
||||
// We can resolve the `impl Trait` to its concrete type,
|
||||
// which enforces a DAG between the functions requiring
|
||||
// the auto trait bounds in question.
|
||||
Ok(vec![tcx.bound_type_of(def_id).subst(tcx, substs)])
|
||||
Ok(vec![tcx.type_of(def_id).subst(tcx, substs)])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -82,8 +82,8 @@ pub fn overlapping_impls(
|
||||
(Some(a), Some(b)) => iter::zip(a.skip_binder().substs, b.skip_binder().substs)
|
||||
.all(|(arg1, arg2)| drcx.generic_args_may_unify(arg1, arg2)),
|
||||
(None, None) => {
|
||||
let self_ty1 = tcx.bound_type_of(impl1_def_id).skip_binder();
|
||||
let self_ty2 = tcx.bound_type_of(impl2_def_id).skip_binder();
|
||||
let self_ty1 = tcx.type_of(impl1_def_id).skip_binder();
|
||||
let self_ty2 = tcx.type_of(impl2_def_id).skip_binder();
|
||||
drcx.types_may_unify(self_ty1, self_ty2)
|
||||
}
|
||||
_ => bug!("unexpected impls: {impl1_def_id:?} {impl2_def_id:?}"),
|
||||
@ -124,7 +124,7 @@ fn with_fresh_ty_vars<'cx, 'tcx>(
|
||||
|
||||
let header = ty::ImplHeader {
|
||||
impl_def_id,
|
||||
self_ty: tcx.bound_type_of(impl_def_id).subst(tcx, impl_substs),
|
||||
self_ty: tcx.type_of(impl_def_id).subst(tcx, impl_substs),
|
||||
trait_ref: tcx.impl_trait_ref(impl_def_id).map(|i| i.subst(tcx, impl_substs)),
|
||||
predicates: tcx.predicates_of(impl_def_id).instantiate(tcx, impl_substs).predicates,
|
||||
};
|
||||
|
@ -2432,7 +2432,7 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
};
|
||||
let mut suggestions = vec![(
|
||||
path.span.shrink_to_lo(),
|
||||
format!("<{} as ", self.tcx.bound_type_of(impl_def_id).subst_identity())
|
||||
format!("<{} as ", self.tcx.type_of(impl_def_id).subst_identity())
|
||||
)];
|
||||
if let Some(generic_arg) = trait_path_segment.args {
|
||||
let between_span = trait_path_segment.ident.span.between(generic_arg.span_ext);
|
||||
|
@ -202,7 +202,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
// signature with no type arguments resolved
|
||||
flags.push((
|
||||
sym::_Self,
|
||||
Some(self.tcx.bound_type_of(def.did()).subst_identity().to_string()),
|
||||
Some(self.tcx.type_of(def.did()).subst_identity().to_string()),
|
||||
));
|
||||
}
|
||||
|
||||
@ -223,7 +223,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
// original signature with no type arguments resolved
|
||||
flags.push((
|
||||
name,
|
||||
Some(self.tcx.bound_type_of(def.did()).subst_identity().to_string()),
|
||||
Some(self.tcx.type_of(def.did()).subst_identity().to_string()),
|
||||
));
|
||||
}
|
||||
}
|
||||
@ -259,7 +259,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
// signature with no type arguments resolved
|
||||
flags.push((
|
||||
sym::_Self,
|
||||
Some(format!("[{}]", self.tcx.bound_type_of(def.did()).subst_identity())),
|
||||
Some(format!("[{}]", self.tcx.type_of(def.did()).subst_identity())),
|
||||
));
|
||||
}
|
||||
if aty.is_integral() {
|
||||
@ -278,7 +278,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
if let Some(def) = aty.ty_adt_def() {
|
||||
// We also want to be able to select the array's type's original
|
||||
// signature with no type arguments resolved
|
||||
let def_ty = self.tcx.bound_type_of(def.did()).subst_identity();
|
||||
let def_ty = self.tcx.type_of(def.did()).subst_identity();
|
||||
flags.push((sym::_Self, Some(format!("[{def_ty}; _]"))));
|
||||
if let Some(n) = len {
|
||||
flags.push((sym::_Self, Some(format!("[{def_ty}; {n}]"))));
|
||||
|
@ -514,7 +514,7 @@ impl<'a, 'b, 'tcx> TypeFolder<TyCtxt<'tcx>> for AssocTypeNormalizer<'a, 'b, 'tcx
|
||||
}
|
||||
|
||||
let substs = substs.fold_with(self);
|
||||
let generic_ty = self.interner().bound_type_of(def_id);
|
||||
let generic_ty = self.interner().type_of(def_id);
|
||||
let concrete_ty = generic_ty.subst(self.interner(), substs);
|
||||
self.depth += 1;
|
||||
let folded_ty = self.fold_ty(concrete_ty);
|
||||
@ -2138,7 +2138,7 @@ fn confirm_impl_candidate<'cx, 'tcx>(
|
||||
let substs = obligation.predicate.substs.rebase_onto(tcx, trait_def_id, substs);
|
||||
let substs =
|
||||
translate_substs(selcx.infcx, param_env, impl_def_id, substs, assoc_ty.defining_node);
|
||||
let ty = tcx.bound_type_of(assoc_ty.item.def_id);
|
||||
let ty = tcx.type_of(assoc_ty.item.def_id);
|
||||
let is_const = matches!(tcx.def_kind(assoc_ty.item.def_id), DefKind::AssocConst);
|
||||
let term: ty::EarlyBinder<ty::Term<'tcx>> = if is_const {
|
||||
let identity_substs =
|
||||
|
@ -228,7 +228,7 @@ impl<'cx, 'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for QueryNormalizer<'cx, 'tcx>
|
||||
return ty.try_super_fold_with(self);
|
||||
}
|
||||
|
||||
let generic_ty = self.interner().bound_type_of(def_id);
|
||||
let generic_ty = self.interner().type_of(def_id);
|
||||
let concrete_ty = generic_ty.subst(self.interner(), substs);
|
||||
self.anon_depth += 1;
|
||||
if concrete_ty == ty {
|
||||
|
@ -557,7 +557,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
ty::INNERMOST,
|
||||
ty::BoundVar::from_usize(bound_vars.len() - 1),
|
||||
),
|
||||
tcx.bound_type_of(param.def_id).subst_identity(),
|
||||
tcx.type_of(param.def_id).subst_identity(),
|
||||
)
|
||||
.into()
|
||||
}
|
||||
@ -1073,7 +1073,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
.fields
|
||||
.last()
|
||||
.expect("expected unsized ADT to have a tail field");
|
||||
let tail_field_ty = tcx.bound_type_of(tail_field.did);
|
||||
let tail_field_ty = tcx.type_of(tail_field.did);
|
||||
|
||||
// Extract `TailField<T>` and `TailField<U>` from `Struct<T>` and `Struct<U>`,
|
||||
// normalizing in the process, since `type_of` returns something directly from
|
||||
|
@ -2350,7 +2350,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
// We can resolve the `impl Trait` to its concrete type,
|
||||
// which enforces a DAG between the functions requiring
|
||||
// the auto trait bounds in question.
|
||||
t.rebind(vec![self.tcx().bound_type_of(def_id).subst(self.tcx(), substs)])
|
||||
t.rebind(vec![self.tcx().type_of(def_id).subst(self.tcx(), substs)])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user