change fn_sig query to use EarlyBinder; remove bound_fn_sig query; add EarlyBinder to fn_sig in metadata
This commit is contained in:
parent
e982971ff2
commit
c2414dfaa4
80 changed files with 142 additions and 152 deletions
|
@ -3140,7 +3140,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
trait_ref.def_id,
|
||||
)?;
|
||||
|
||||
let fn_sig = tcx.bound_fn_sig(assoc.def_id).subst(
|
||||
let fn_sig = tcx.fn_sig(assoc.def_id).subst(
|
||||
tcx,
|
||||
trait_ref.substs.extend_to(tcx, assoc.def_id, |param, _| tcx.mk_param_from_def(param)),
|
||||
);
|
||||
|
|
|
@ -249,7 +249,7 @@ fn compare_method_predicate_entailment<'tcx>(
|
|||
let unnormalized_impl_sig = infcx.replace_bound_vars_with_fresh_vars(
|
||||
impl_m_span,
|
||||
infer::HigherRankedType,
|
||||
tcx.bound_fn_sig(impl_m.def_id).subst_identity(),
|
||||
tcx.fn_sig(impl_m.def_id).subst_identity(),
|
||||
);
|
||||
let unnormalized_impl_fty = tcx.mk_fn_ptr(ty::Binder::dummy(unnormalized_impl_sig));
|
||||
|
||||
|
@ -257,7 +257,7 @@ fn compare_method_predicate_entailment<'tcx>(
|
|||
let impl_sig = ocx.normalize(&norm_cause, param_env, unnormalized_impl_sig);
|
||||
debug!("compare_impl_method: impl_fty={:?}", impl_sig);
|
||||
|
||||
let trait_sig = tcx.bound_fn_sig(trait_m.def_id).subst(tcx, trait_to_placeholder_substs);
|
||||
let trait_sig = tcx.fn_sig(trait_m.def_id).subst(tcx, trait_to_placeholder_substs);
|
||||
let trait_sig = tcx.liberate_late_bound_regions(impl_m.def_id, trait_sig);
|
||||
|
||||
// Next, add all inputs and output as well-formed tys. Importantly,
|
||||
|
@ -422,8 +422,8 @@ fn extract_bad_args_for_implies_lint<'tcx>(
|
|||
|
||||
// Map late-bound regions from trait to impl, so the names are right.
|
||||
let mapping = std::iter::zip(
|
||||
tcx.bound_fn_sig(trait_m.def_id).subst_identity().bound_vars(),
|
||||
tcx.bound_fn_sig(impl_m.def_id).subst_identity().bound_vars(),
|
||||
tcx.fn_sig(trait_m.def_id).subst_identity().bound_vars(),
|
||||
tcx.fn_sig(impl_m.def_id).subst_identity().bound_vars(),
|
||||
)
|
||||
.filter_map(|(impl_bv, trait_bv)| {
|
||||
if let ty::BoundVariableKind::Region(impl_bv) = impl_bv
|
||||
|
@ -540,7 +540,7 @@ fn compare_asyncness<'tcx>(
|
|||
trait_item_span: Option<Span>,
|
||||
) -> Result<(), ErrorGuaranteed> {
|
||||
if tcx.asyncness(trait_m.def_id) == hir::IsAsync::Async {
|
||||
match tcx.bound_fn_sig(impl_m.def_id).subst_identity().skip_binder().output().kind() {
|
||||
match tcx.fn_sig(impl_m.def_id).subst_identity().skip_binder().output().kind() {
|
||||
ty::Alias(ty::Opaque, ..) => {
|
||||
// allow both `async fn foo()` and `fn foo() -> impl Future`
|
||||
}
|
||||
|
@ -643,7 +643,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
|
|||
infcx.replace_bound_vars_with_fresh_vars(
|
||||
return_span,
|
||||
infer::HigherRankedType,
|
||||
tcx.bound_fn_sig(impl_m.def_id).subst_identity(),
|
||||
tcx.fn_sig(impl_m.def_id).subst_identity(),
|
||||
),
|
||||
);
|
||||
impl_sig.error_reported()?;
|
||||
|
@ -657,7 +657,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
|
|||
let unnormalized_trait_sig = tcx
|
||||
.liberate_late_bound_regions(
|
||||
impl_m.def_id,
|
||||
tcx.bound_fn_sig(trait_m.def_id).subst(tcx, trait_to_placeholder_substs),
|
||||
tcx.fn_sig(trait_m.def_id).subst(tcx, trait_to_placeholder_substs),
|
||||
)
|
||||
.fold_with(&mut collector);
|
||||
let trait_sig = ocx.normalize(&norm_cause, param_env, unnormalized_trait_sig);
|
||||
|
@ -1117,7 +1117,7 @@ fn compare_self_type<'tcx>(
|
|||
ty::ImplContainer => impl_trait_ref.self_ty(),
|
||||
ty::TraitContainer => tcx.types.self_param,
|
||||
};
|
||||
let self_arg_ty = tcx.bound_fn_sig(method.def_id).subst_identity().input(0);
|
||||
let self_arg_ty = tcx.fn_sig(method.def_id).subst_identity().input(0);
|
||||
let param_env = ty::ParamEnv::reveal_all();
|
||||
|
||||
let infcx = tcx.infer_ctxt().build();
|
||||
|
@ -1348,8 +1348,8 @@ fn compare_number_of_method_arguments<'tcx>(
|
|||
trait_m: &ty::AssocItem,
|
||||
trait_item_span: Option<Span>,
|
||||
) -> Result<(), ErrorGuaranteed> {
|
||||
let impl_m_fty = tcx.bound_fn_sig(impl_m.def_id);
|
||||
let trait_m_fty = tcx.bound_fn_sig(trait_m.def_id);
|
||||
let impl_m_fty = tcx.fn_sig(impl_m.def_id);
|
||||
let trait_m_fty = tcx.fn_sig(trait_m.def_id);
|
||||
let trait_number_args = trait_m_fty.skip_binder().inputs().skip_binder().len();
|
||||
let impl_number_args = impl_m_fty.skip_binder().inputs().skip_binder().len();
|
||||
|
||||
|
|
|
@ -58,7 +58,12 @@ fn equate_intrinsic_type<'tcx>(
|
|||
let fty = tcx.mk_fn_ptr(sig);
|
||||
let it_def_id = it.owner_id.def_id;
|
||||
let cause = ObligationCause::new(it.span, it_def_id, ObligationCauseCode::IntrinsicType);
|
||||
require_same_types(tcx, &cause, tcx.mk_fn_ptr(tcx.bound_fn_sig(it.owner_id.to_def_id()).subst_identity()), fty);
|
||||
require_same_types(
|
||||
tcx,
|
||||
&cause,
|
||||
tcx.mk_fn_ptr(tcx.fn_sig(it.owner_id).subst_identity()),
|
||||
fty,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -445,7 +445,7 @@ fn suggestion_signature(assoc: &ty::AssocItem, tcx: TyCtxt<'_>) -> String {
|
|||
// regions just fine, showing `fn(&MyType)`.
|
||||
fn_sig_suggestion(
|
||||
tcx,
|
||||
tcx.bound_fn_sig(assoc.def_id).subst_identity().skip_binder(),
|
||||
tcx.fn_sig(assoc.def_id).subst_identity().skip_binder(),
|
||||
assoc.ident(tcx),
|
||||
tcx.predicates_of(assoc.def_id),
|
||||
assoc,
|
||||
|
|
|
@ -386,7 +386,7 @@ fn check_gat_where_clauses(tcx: TyCtxt<'_>, associated_items: &[hir::TraitItemRe
|
|||
// `Self::Iter<'a>` is a GAT we want to gather any potential missing bounds from.
|
||||
let sig: ty::FnSig<'_> = tcx.liberate_late_bound_regions(
|
||||
item_def_id.to_def_id(),
|
||||
tcx.bound_fn_sig(item_def_id.to_def_id()).subst_identity(),
|
||||
tcx.fn_sig(item_def_id).subst_identity(),
|
||||
);
|
||||
gather_gat_bounds(
|
||||
tcx,
|
||||
|
@ -1018,7 +1018,7 @@ fn check_associated_item(
|
|||
wfcx.register_wf_obligation(span, loc, ty.into());
|
||||
}
|
||||
ty::AssocKind::Fn => {
|
||||
let sig = tcx.bound_fn_sig(item.def_id).subst_identity();
|
||||
let sig = tcx.fn_sig(item.def_id).subst_identity();
|
||||
let hir_sig = sig_if_method.expect("bad signature for method");
|
||||
check_fn_or_method(
|
||||
wfcx,
|
||||
|
@ -1203,7 +1203,7 @@ fn check_item_fn(
|
|||
decl: &hir::FnDecl<'_>,
|
||||
) {
|
||||
enter_wf_checking_ctxt(tcx, span, def_id, |wfcx| {
|
||||
let sig = tcx.bound_fn_sig(def_id.into()).subst_identity();
|
||||
let sig = tcx.fn_sig(def_id).subst_identity();
|
||||
check_fn_or_method(wfcx, ident.span, sig, decl, def_id);
|
||||
})
|
||||
}
|
||||
|
@ -1638,7 +1638,7 @@ fn check_method_receiver<'tcx>(
|
|||
|
||||
let span = fn_sig.decl.inputs[0].span;
|
||||
|
||||
let sig = tcx.bound_fn_sig(method.def_id).subst_identity();
|
||||
let sig = tcx.fn_sig(method.def_id).subst_identity();
|
||||
let sig = tcx.liberate_late_bound_regions(method.def_id, sig);
|
||||
let sig = wfcx.normalize(span, None, sig);
|
||||
|
||||
|
|
|
@ -1087,7 +1087,7 @@ pub fn get_infer_ret_ty<'hir>(output: &'hir hir::FnRetTy<'hir>) -> Option<&'hir
|
|||
}
|
||||
|
||||
#[instrument(level = "debug", skip(tcx))]
|
||||
fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::PolyFnSig<'_> {
|
||||
fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::EarlyBinder<ty::PolyFnSig<'_>> {
|
||||
use rustc_hir::Node::*;
|
||||
use rustc_hir::*;
|
||||
|
||||
|
@ -1096,7 +1096,7 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::PolyFnSig<'_> {
|
|||
|
||||
let icx = ItemCtxt::new(tcx, def_id.to_def_id());
|
||||
|
||||
match tcx.hir().get(hir_id) {
|
||||
let output = match tcx.hir().get(hir_id) {
|
||||
TraitItem(hir::TraitItem {
|
||||
kind: TraitItemKind::Fn(sig, TraitFn::Provided(_)),
|
||||
generics,
|
||||
|
@ -1169,7 +1169,8 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::PolyFnSig<'_> {
|
|||
x => {
|
||||
bug!("unexpected sort of node in fn_sig(): {:?}", x);
|
||||
}
|
||||
}
|
||||
};
|
||||
ty::EarlyBinder(output)
|
||||
}
|
||||
|
||||
fn infer_return_ty_for_fn_sig<'tcx>(
|
||||
|
|
|
@ -868,7 +868,7 @@ fn infer_placeholder_type<'a>(
|
|||
|
||||
match ty.kind() {
|
||||
ty::FnDef(def_id, _) => {
|
||||
self.tcx.mk_fn_ptr(self.tcx.bound_fn_sig(*def_id).subst_identity())
|
||||
self.tcx.mk_fn_ptr(self.tcx.fn_sig(*def_id).subst_identity())
|
||||
}
|
||||
// FIXME: non-capturing closures should also suggest a function pointer
|
||||
ty::Closure(..) | ty::Generator(..) => {
|
||||
|
|
|
@ -182,7 +182,7 @@ fn require_same_types<'tcx>(
|
|||
}
|
||||
|
||||
fn check_main_fn_ty(tcx: TyCtxt<'_>, main_def_id: DefId) {
|
||||
let main_fnsig = tcx.bound_fn_sig(main_def_id).subst_identity();
|
||||
let main_fnsig = tcx.fn_sig(main_def_id).subst_identity();
|
||||
let main_span = tcx.def_span(main_def_id);
|
||||
|
||||
fn main_fn_diagnostics_def_id(tcx: TyCtxt<'_>, def_id: DefId, sp: Span) -> LocalDefId {
|
||||
|
@ -449,7 +449,7 @@ fn check_start_fn_ty(tcx: TyCtxt<'_>, start_def_id: DefId) {
|
|||
ObligationCauseCode::StartFunctionType,
|
||||
),
|
||||
se_ty,
|
||||
tcx.mk_fn_ptr(tcx.bound_fn_sig(start_def_id.into()).subst_identity()),
|
||||
tcx.mk_fn_ptr(tcx.fn_sig(start_def_id).subst_identity()),
|
||||
);
|
||||
}
|
||||
_ => {
|
||||
|
|
|
@ -121,7 +121,7 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
|
|||
ty::FnDef(..) => {
|
||||
self.add_constraints_from_sig(
|
||||
current_item,
|
||||
tcx.bound_fn_sig(def_id.into()).subst_identity(),
|
||||
tcx.fn_sig(def_id).subst_identity(),
|
||||
self.covariant,
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue