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:
@@ -256,7 +256,6 @@ impl UniversalRegionRelationsBuilder<'cx, 'tcx> {
|
||||
debug!("build: input_or_output={:?}", ty);
|
||||
// We add implied bounds from both the unnormalized and normalized ty
|
||||
// See issue #87748
|
||||
let constraints_implied_1 = self.add_implied_bounds(ty);
|
||||
let TypeOpOutput { output: norm_ty, constraints: constraints1, .. } = self
|
||||
.param_env
|
||||
.and(type_op::normalize::Normalize::new(ty))
|
||||
@@ -284,10 +283,9 @@ impl UniversalRegionRelationsBuilder<'cx, 'tcx> {
|
||||
// }
|
||||
// ```
|
||||
// Both &Self::Bar and &() are WF
|
||||
let constraints_implied_2 =
|
||||
if ty != norm_ty { self.add_implied_bounds(norm_ty) } else { None };
|
||||
let constraints_implied = self.add_implied_bounds(norm_ty);
|
||||
normalized_inputs_and_output.push(norm_ty);
|
||||
constraints1.into_iter().chain(constraints_implied_1).chain(constraints_implied_2)
|
||||
constraints1.into_iter().chain(constraints_implied)
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
||||
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user