Skip to content

Commit ccbe983

Browse files
Use one more let chain
1 parent 66ea349 commit ccbe983

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

compiler/rustc_next_trait_solver/src/solve/trait_goals.rs

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -127,33 +127,32 @@ where
127127
goal: Goal<I, Self>,
128128
assumption: I::Clause,
129129
) -> Result<(), NoSolution> {
130-
if let Some(trait_clause) = assumption.as_trait_clause() {
131-
if trait_clause.polarity() != goal.predicate.polarity {
132-
return Err(NoSolution);
133-
}
134-
135-
if trait_clause.def_id() == goal.predicate.def_id() {
136-
if DeepRejectCtxt::relate_rigid_rigid(ecx.cx()).args_may_unify(
137-
goal.predicate.trait_ref.args,
138-
trait_clause.skip_binder().trait_ref.args,
139-
) {
140-
return Ok(());
141-
}
142-
}
143-
130+
fn trait_def_id_matches<I: Interner>(
131+
cx: I,
132+
clause_def_id: I::DefId,
133+
goal_def_id: I::DefId,
134+
) -> bool {
135+
clause_def_id == goal_def_id
144136
// PERF(sized-hierarchy): Sizedness supertraits aren't elaborated to improve perf, so
145-
// check for a `Sized` subtrait when looking for `MetaSized`. `PointeeSized` bounds
146-
// are syntactic sugar for a lack of bounds so don't need this.
147-
if ecx.cx().is_lang_item(goal.predicate.def_id(), TraitSolverLangItem::MetaSized)
148-
&& ecx.cx().is_lang_item(trait_clause.def_id(), TraitSolverLangItem::Sized)
149-
{
150-
let meta_sized_clause =
151-
trait_predicate_with_def_id(ecx.cx(), trait_clause, goal.predicate.def_id());
152-
return Self::fast_reject_assumption(ecx, goal, meta_sized_clause);
153-
}
137+
// check for a `MetaSized` supertrait being matched against a `Sized` assumption.
138+
//
139+
// `PointeeSized` bounds are syntactic sugar for a lack of bounds so don't need this.
140+
|| (cx.is_lang_item(clause_def_id, TraitSolverLangItem::Sized)
141+
&& cx.is_lang_item(goal_def_id, TraitSolverLangItem::MetaSized))
154142
}
155143

156-
Err(NoSolution)
144+
if let Some(trait_clause) = assumption.as_trait_clause()
145+
&& trait_clause.polarity() == goal.predicate.polarity
146+
&& trait_def_id_matches(ecx.cx(), trait_clause.def_id(), goal.predicate.def_id())
147+
&& DeepRejectCtxt::relate_rigid_rigid(ecx.cx()).args_may_unify(
148+
goal.predicate.trait_ref.args,
149+
trait_clause.skip_binder().trait_ref.args,
150+
)
151+
{
152+
return Ok(());
153+
} else {
154+
Err(NoSolution)
155+
}
157156
}
158157

159158
fn match_assumption(

0 commit comments

Comments
 (0)