1
Fork 0

Don't ICE on placeholder consts in deep reject

This commit is contained in:
Michael Goulet 2023-03-29 23:28:27 +00:00
parent 17c1167216
commit 1ce6e2bd33
3 changed files with 42 additions and 1 deletions

View file

@ -312,6 +312,7 @@ impl DeepRejectCtxt {
// Impls cannot contain these types as these cannot be named directly.
ty::FnDef(..) | ty::Closure(..) | ty::Generator(..) => false,
// Placeholder types don't unify with anything on their own
ty::Placeholder(..) | ty::Bound(..) => false,
// Depending on the value of `treat_obligation_params`, we either
@ -359,6 +360,9 @@ impl DeepRejectCtxt {
TreatParams::AsCandidateKey => true,
},
// Placeholder consts don't unify with anything on their own
ty::ConstKind::Placeholder(_) => false,
// As we don't necessarily eagerly evaluate constants,
// they might unify with any value.
ty::ConstKind::Expr(_) | ty::ConstKind::Unevaluated(_) | ty::ConstKind::Error(_) => {
@ -371,7 +375,7 @@ impl DeepRejectCtxt {
ty::ConstKind::Infer(_) => true,
ty::ConstKind::Bound(..) | ty::ConstKind::Placeholder(_) => {
ty::ConstKind::Bound(..) => {
bug!("unexpected obl const: {:?}", obligation_ct)
}
}