Rollup merge of #91243 - jackh726:issue-91068, r=nikomatsakis
Don't treat unnormalized function arguments as well-formed Partial revert of #88312 r? ``@pnkfelix`` cc ``@nikomatsakis``
This commit is contained in:
commit
6e7cf2e88b
8 changed files with 52 additions and 46 deletions
|
@ -264,14 +264,9 @@ fn compare_predicate_entailment<'tcx>(
|
|||
// First liberate late bound regions and subst placeholders
|
||||
let trait_sig = tcx.liberate_late_bound_regions(impl_m.def_id, tcx.fn_sig(trait_m.def_id));
|
||||
let trait_sig = trait_sig.subst(tcx, trait_to_placeholder_substs);
|
||||
// Next, add all inputs and output as well-formed tys. Importantly,
|
||||
// we have to do this before normalization, since the normalized ty may
|
||||
// not contain the input parameters. See issue #87748.
|
||||
wf_tys.extend(trait_sig.inputs_and_output.iter());
|
||||
let trait_sig =
|
||||
inh.normalize_associated_types_in(impl_m_span, impl_m_hir_id, param_env, trait_sig);
|
||||
// Also add the resulting inputs and output as well-formed.
|
||||
// This probably isn't strictly necessary.
|
||||
// Add the resulting inputs and output as well-formed.
|
||||
wf_tys.extend(trait_sig.inputs_and_output.iter());
|
||||
let trait_fty = tcx.mk_fn_ptr(ty::Binder::dummy(trait_sig));
|
||||
|
||||
|
|
|
@ -391,7 +391,6 @@ fn typeck_with_fallback<'tcx>(
|
|||
let mut wf_tys = FxHashSet::default();
|
||||
// Compute the fty from point of view of inside the fn.
|
||||
let fn_sig = tcx.liberate_late_bound_regions(def_id.to_def_id(), fn_sig);
|
||||
wf_tys.extend(fn_sig.inputs_and_output.iter());
|
||||
let fn_sig = inh.normalize_associated_types_in(
|
||||
body.value.span,
|
||||
body_id.hir_id,
|
||||
|
|
|
@ -1334,11 +1334,6 @@ fn check_fn_or_method<'fcx, 'tcx>(
|
|||
) {
|
||||
let sig = fcx.tcx.liberate_late_bound_regions(def_id, sig);
|
||||
|
||||
// Unnormalized types in signature are WF too
|
||||
implied_bounds.extend(sig.inputs());
|
||||
// FIXME(#27579) return types should not be implied bounds
|
||||
implied_bounds.insert(sig.output());
|
||||
|
||||
// Normalize the input and output types one at a time, using a different
|
||||
// `WellFormedLoc` for each. We cannot call `normalize_associated_types`
|
||||
// on the entire `FnSig`, since this would use the same `WellFormedLoc`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue