diff options
| author | bors <bors@rust-lang.org> | 2025-10-04 00:02:26 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-10-04 00:02:26 +0000 |
| commit | 7950f244e7ef55b61a83d12f4662be643cd182d6 (patch) | |
| tree | 6f741b4059ce1061d04ffa47c43658535c62b6f3 /compiler/rustc_trait_selection/src/traits/select/confirmation.rs | |
| parent | 595b9a498bc55fcd30111e430d8e4290ed833b4c (diff) | |
| parent | e3f104608c0ad26e80b1ebedef2ab8a748189e52 (diff) | |
| download | rust-7950f244e7ef55b61a83d12f4662be643cd182d6.tar.gz rust-7950f244e7ef55b61a83d12f4662be643cd182d6.zip | |
Auto merge of #147299 - compiler-errors:hr-norm, r=jackh726
Don't normalize higher-ranked assumptions if they're not used See the comment in the code. Normalizing these assumptions may cause us to register things like new placeholder outlives obligations that cause higher-ranked lifetime errors, and this is problematic if we're not even using these assumptions in borrowck. Fixes rust-lang/rust#147244 Fixes rust-lang/rust#147285
Diffstat (limited to 'compiler/rustc_trait_selection/src/traits/select/confirmation.rs')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/select/confirmation.rs | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/select/confirmation.rs b/compiler/rustc_trait_selection/src/traits/select/confirmation.rs index 7ad65a1df8e..708a53f6c65 100644 --- a/compiler/rustc_trait_selection/src/traits/select/confirmation.rs +++ b/compiler/rustc_trait_selection/src/traits/select/confirmation.rs @@ -423,19 +423,24 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { constituents.types, ); - // FIXME(coroutine_clone): We could uplift this into `collect_predicates_for_types` - // and do this for `Copy`/`Clone` too, but that's feature-gated so it doesn't really - // matter yet. - for assumption in constituents.assumptions { - let assumption = normalize_with_depth_to( - self, - obligation.param_env, - cause.clone(), - obligation.recursion_depth + 1, - assumption, - &mut obligations, - ); - self.infcx.register_region_assumption(assumption); + // Only normalize these goals if `-Zhigher-ranked-assumptions` is enabled, since + // we don't want to cause ourselves to do extra work if we're not even able to + // take advantage of these assumption clauses. + if self.tcx().sess.opts.unstable_opts.higher_ranked_assumptions { + // FIXME(coroutine_clone): We could uplift this into `collect_predicates_for_types` + // and do this for `Copy`/`Clone` too, but that's feature-gated so it doesn't really + // matter yet. + for assumption in constituents.assumptions { + let assumption = normalize_with_depth_to( + self, + obligation.param_env, + cause.clone(), + obligation.recursion_depth + 1, + assumption, + &mut obligations, + ); + self.infcx.register_region_assumption(assumption); + } } Ok(obligations) |
