Tweak consts_may_unify.

`ConstKind::Value` is the only variant where control flow leaves the
first match on `impl_ct.kind()`, so there is no need for a second match
on the same expression later on.
This commit is contained in:
Nicholas Nethercote 2024-05-02 13:27:57 +10:00
parent 4f81879620
commit 3722eb0b8f

View File

@ -330,20 +330,19 @@ pub fn types_may_unify<'tcx>(self, obligation_ty: Ty<'tcx>, impl_ty: Ty<'tcx>) -
} }
pub fn consts_may_unify(self, obligation_ct: ty::Const<'_>, impl_ct: ty::Const<'_>) -> bool { pub fn consts_may_unify(self, obligation_ct: ty::Const<'_>, impl_ct: ty::Const<'_>) -> bool {
match impl_ct.kind() { let impl_val = match impl_ct.kind() {
ty::ConstKind::Expr(_) ty::ConstKind::Expr(_)
| ty::ConstKind::Param(_) | ty::ConstKind::Param(_)
| ty::ConstKind::Unevaluated(_) | ty::ConstKind::Unevaluated(_)
| ty::ConstKind::Error(_) => { | ty::ConstKind::Error(_) => {
return true; return true;
} }
ty::ConstKind::Value(_) => {} ty::ConstKind::Value(impl_val) => impl_val,
ty::ConstKind::Infer(_) | ty::ConstKind::Bound(..) | ty::ConstKind::Placeholder(_) => { ty::ConstKind::Infer(_) | ty::ConstKind::Bound(..) | ty::ConstKind::Placeholder(_) => {
bug!("unexpected impl arg: {:?}", impl_ct) bug!("unexpected impl arg: {:?}", impl_ct)
} }
} };
let k = impl_ct.kind();
match obligation_ct.kind() { match obligation_ct.kind() {
ty::ConstKind::Param(_) => match self.treat_obligation_params { ty::ConstKind::Param(_) => match self.treat_obligation_params {
TreatParams::ForLookup => false, TreatParams::ForLookup => false,
@ -358,10 +357,7 @@ pub fn consts_may_unify(self, obligation_ct: ty::Const<'_>, impl_ct: ty::Const<'
ty::ConstKind::Expr(_) | ty::ConstKind::Unevaluated(_) | ty::ConstKind::Error(_) => { ty::ConstKind::Expr(_) | ty::ConstKind::Unevaluated(_) | ty::ConstKind::Error(_) => {
true true
} }
ty::ConstKind::Value(obl) => match k { ty::ConstKind::Value(obl_val) => obl_val == impl_val,
ty::ConstKind::Value(imp) => obl == imp,
_ => true,
},
ty::ConstKind::Infer(_) => true, ty::ConstKind::Infer(_) => true,