diff options
| author | lcnr <rust@lcnr.de> | 2025-08-27 10:03:47 +0200 |
|---|---|---|
| committer | lcnr <rust@lcnr.de> | 2025-09-08 14:17:56 +0200 |
| commit | 67965f817d2eb47f5238b43f21b35259806b6280 (patch) | |
| tree | a0ab8a4bff16e78346cfe71f39c6ae0bb84f0855 /compiler/rustc_next_trait_solver/src/solve/mod.rs | |
| parent | f099b241e20d0d9b2fc02fd66a487529bd597d72 (diff) | |
| download | rust-67965f817d2eb47f5238b43f21b35259806b6280.tar.gz rust-67965f817d2eb47f5238b43f21b35259806b6280.zip | |
eagerly compute `sub_relations` again
Diffstat (limited to 'compiler/rustc_next_trait_solver/src/solve/mod.rs')
| -rw-r--r-- | compiler/rustc_next_trait_solver/src/solve/mod.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/compiler/rustc_next_trait_solver/src/solve/mod.rs b/compiler/rustc_next_trait_solver/src/solve/mod.rs index 85f9d852d95..a2db21796a2 100644 --- a/compiler/rustc_next_trait_solver/src/solve/mod.rs +++ b/compiler/rustc_next_trait_solver/src/solve/mod.rs @@ -119,11 +119,15 @@ where #[instrument(level = "trace", skip(self))] fn compute_subtype_goal(&mut self, goal: Goal<I, ty::SubtypePredicate<I>>) -> QueryResult<I> { - if goal.predicate.a.is_ty_var() && goal.predicate.b.is_ty_var() { - self.evaluate_added_goals_and_make_canonical_response(Certainty::AMBIGUOUS) - } else { - self.sub(goal.param_env, goal.predicate.a, goal.predicate.b)?; - self.evaluate_added_goals_and_make_canonical_response(Certainty::Yes) + match (goal.predicate.a.kind(), goal.predicate.b.kind()) { + (ty::Infer(ty::TyVar(a_vid)), ty::Infer(ty::TyVar(b_vid))) => { + self.sub_ty_vids_raw(a_vid, b_vid); + self.evaluate_added_goals_and_make_canonical_response(Certainty::AMBIGUOUS) + } + _ => { + self.sub(goal.param_env, goal.predicate.a, goal.predicate.b)?; + self.evaluate_added_goals_and_make_canonical_response(Certainty::Yes) + } } } |
