Rollup merge of #136838 - compiler-errors:escaping-unsize, r=fmease

Check whole `Unsize` predicate for escaping bound vars

Fixes #136799
This commit is contained in:
Guillaume Gomez 2025-02-12 20:30:52 +01:00 committed by GitHub
commit 993eb34d84
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 44 additions and 2 deletions

View file

@ -920,11 +920,12 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
// T: Trait
// so it seems ok if we (conservatively) fail to accept that `Unsize`
// obligation above. Should be possible to extend this in the future.
let Some(source) = obligation.self_ty().no_bound_vars() else {
let Some(trait_pred) = obligation.predicate.no_bound_vars() else {
// Don't add any candidates if there are bound regions.
return;
};
let target = obligation.predicate.skip_binder().trait_ref.args.type_at(1);
let source = trait_pred.self_ty();
let target = trait_pred.trait_ref.args.type_at(1);
debug!(?source, ?target, "assemble_candidates_for_unsizing");