diff options
author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-03-08 21:26:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-08 21:26:50 +0100 |
commit | 9408af97f57ab0956d64558116f4464f2b9f2411 (patch) | |
tree | 376dc545848da07b7f479ef62a9025fc79724386 /RELEASES.md | |
parent | 7c306f6dcd600b1fcc74439c780e8ebef338d84c (diff) | |
parent | 118afdf071ce38f91c054f013c1774926fa28b15 (diff) | |
download | rust-9408af97f57ab0956d64558116f4464f2b9f2411.tar.gz |
Rollup merge of #108754 - compiler-errors:retry, r=oli-obk
Retry `pred_known_to_hold_modulo_regions` with fulfillment if ambiguous
Fixes #108721
The problem here is that when we're checking `is_sized_raw` during codegen on some type that has a lot of opaques in it, something emits several nested obligations that are individually ambiguous, but when processed together in a loop then apply modulo regions. Since the `evaluate_predicates_recursively` inner loop doesn't process predicates until they stop changing, we return `EvaluatedToAmbig`, which makes the sized check return false incorrectly. See:
https://github.com/rust-lang/rust/blob/f15f0ea73972786e426732c5b92ba9a904b866c4/compiler/rustc_trait_selection/src/traits/select/mod.rs#L596-L606
... Compared to the analogous loop in the new solver:
https://github.com/rust-lang/rust/blob/f15f0ea73972786e426732c5b92ba9a904b866c4/compiler/rustc_trait_selection/src/solve/mod.rs#L481-L512
To fix this, if we get ambiguous during `pred_known_to_hold_modulo_regions`, just retry the obligation in a fulfillment context.
--
Unfortunately... I don't have a test for this. I've only tested this locally. Pending minimization :/
r? types
Diffstat (limited to 'RELEASES.md')
0 files changed, 0 insertions, 0 deletions