Skip to content

Commit f114acf

Browse files
committed
add unused NormalizesTo predicate
1 parent b4ba7c4 commit f114acf

File tree

26 files changed

+100
-41
lines changed

26 files changed

+100
-41
lines changed

compiler/rustc_hir_analysis/src/astconv/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1519,6 +1519,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
15191519
ty::Clause::RegionOutlives(_) | ty::Clause::ConstArgHasType(..) => bug!(),
15201520
},
15211521
ty::PredicateKind::WellFormed(_)
1522+
| ty::PredicateKind::NormalizesTo(..)
15221523
| ty::PredicateKind::AliasRelate(..)
15231524
| ty::PredicateKind::ObjectSafe(_)
15241525
| ty::PredicateKind::ClosureKind(_, _, _)

compiler/rustc_hir_analysis/src/impl_wf_check/min_specialization.rs

+1
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,7 @@ fn trait_predicate_kind<'tcx>(
541541
| ty::PredicateKind::Clause(ty::Clause::TypeOutlives(_))
542542
| ty::PredicateKind::Clause(ty::Clause::Projection(_))
543543
| ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..))
544+
| ty::PredicateKind::NormalizesTo(..)
544545
| ty::PredicateKind::AliasRelate(..)
545546
| ty::PredicateKind::WellFormed(_)
546547
| ty::PredicateKind::Subtype(_)

compiler/rustc_hir_analysis/src/outlives/explicit.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,20 @@ impl<'tcx> ExplicitPredicatesMap<'tcx> {
5656
| ty::PredicateKind::Clause(ty::Clause::Projection(..))
5757
| ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..))
5858
| ty::PredicateKind::WellFormed(..)
59-
| ty::PredicateKind::AliasRelate(..)
60-
| ty::PredicateKind::ObjectSafe(..)
59+
| ty::PredicateKind::ConstEvaluatable(..) => (),
60+
ty::PredicateKind::ObjectSafe(_)
6161
| ty::PredicateKind::ClosureKind(..)
6262
| ty::PredicateKind::Subtype(..)
6363
| ty::PredicateKind::Coerce(..)
64-
| ty::PredicateKind::ConstEvaluatable(..)
6564
| ty::PredicateKind::ConstEquate(..)
6665
| ty::PredicateKind::Ambiguous
67-
| ty::PredicateKind::TypeWellFormedFromEnv(..) => (),
66+
| ty::PredicateKind::NormalizesTo(..)
67+
| ty::PredicateKind::AliasRelate(..)
68+
| ty::PredicateKind::TypeWellFormedFromEnv(..) => {
69+
bug!(
70+
"`explicit_predicates_of` should only deal with clauses: {predicate:?}"
71+
)
72+
}
6873
}
6974
}
7075

compiler/rustc_hir_typeck/src/fn_ctxt/_impl.rs

+1
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
670670
| ty::PredicateKind::Clause(ty::Clause::TypeOutlives(..))
671671
| ty::PredicateKind::WellFormed(..)
672672
| ty::PredicateKind::ObjectSafe(..)
673+
| ty::PredicateKind::NormalizesTo(..)
673674
| ty::PredicateKind::AliasRelate(..)
674675
| ty::PredicateKind::ConstEvaluatable(..)
675676
| ty::PredicateKind::ConstEquate(..)

compiler/rustc_hir_typeck/src/method/probe.rs

+1
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> {
845845
| ty::PredicateKind::ConstEvaluatable(..)
846846
| ty::PredicateKind::ConstEquate(..)
847847
| ty::PredicateKind::Ambiguous
848+
| ty::PredicateKind::NormalizesTo(..)
848849
| ty::PredicateKind::AliasRelate(..)
849850
| ty::PredicateKind::TypeWellFormedFromEnv(..) => None,
850851
}

compiler/rustc_infer/src/infer/outlives/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub fn explicit_outlives_bounds<'tcx>(
2626
ty::PredicateKind::Clause(ty::Clause::Projection(..))
2727
| ty::PredicateKind::Clause(ty::Clause::Trait(..))
2828
| ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..))
29+
| ty::PredicateKind::NormalizesTo(..)
2930
| ty::PredicateKind::AliasRelate(..)
3031
| ty::PredicateKind::Coerce(..)
3132
| ty::PredicateKind::Subtype(..)

compiler/rustc_infer/src/traits/util.rs

+5-8
Original file line numberDiff line numberDiff line change
@@ -327,14 +327,11 @@ impl<'tcx, O: Elaboratable<'tcx>> Elaborator<'tcx, O> {
327327
.map(|predicate| elaboratable.child(predicate)),
328328
);
329329
}
330-
ty::PredicateKind::TypeWellFormedFromEnv(..) => {
331-
// Nothing to elaborate
332-
}
333-
ty::PredicateKind::Ambiguous => {}
334-
ty::PredicateKind::AliasRelate(..) => {
335-
// No
336-
}
337-
ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..)) => {
330+
ty::PredicateKind::TypeWellFormedFromEnv(..)
331+
| ty::PredicateKind::Ambiguous
332+
| ty::PredicateKind::NormalizesTo(..)
333+
| ty::PredicateKind::AliasRelate(..)
334+
| ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..)) => {
338335
// Nothing to elaborate
339336
}
340337
}

compiler/rustc_lint/src/builtin.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1608,6 +1608,7 @@ impl<'tcx> LateLintPass<'tcx> for TrivialConstraints {
16081608
// Ignore projections, as they can only be global
16091609
// if the trait bound is global
16101610
Clause(Clause::Projection(..)) |
1611+
NormalizesTo(..) |
16111612
AliasRelate(..) |
16121613
// Ignore bounds that a user can't type
16131614
WellFormed(..) |

compiler/rustc_middle/src/ty/flags.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,11 @@ impl FlagComputation {
288288
self.add_ty(ty);
289289
}
290290
ty::PredicateKind::Ambiguous => {}
291-
ty::PredicateKind::AliasRelate(t1, t2, _) => {
291+
ty::PredicateKind::NormalizesTo(ty::ProjectionPredicate { projection_ty, term }) => {
292+
self.add_alias_ty(projection_ty);
293+
self.add_term(term);
294+
}
295+
ty::PredicateKind::AliasRelate(t1, t2, _direction) => {
292296
self.add_term(t1);
293297
self.add_term(t2);
294298
}

compiler/rustc_middle/src/ty/mod.rs

+16-2
Original file line numberDiff line numberDiff line change
@@ -537,12 +537,14 @@ impl<'tcx> Predicate<'tcx> {
537537
pub fn allow_normalization(self) -> bool {
538538
match self.kind().skip_binder() {
539539
PredicateKind::WellFormed(_) => false,
540+
// Only used by the new solver where we should not
541+
// normalize any goals.
542+
PredicateKind::NormalizesTo(..) | PredicateKind::AliasRelate(..) => false,
540543
PredicateKind::Clause(Clause::Trait(_))
541544
| PredicateKind::Clause(Clause::RegionOutlives(_))
542545
| PredicateKind::Clause(Clause::TypeOutlives(_))
543546
| PredicateKind::Clause(Clause::Projection(_))
544547
| PredicateKind::Clause(Clause::ConstArgHasType(..))
545-
| PredicateKind::AliasRelate(..)
546548
| PredicateKind::ObjectSafe(_)
547549
| PredicateKind::ClosureKind(_, _, _)
548550
| PredicateKind::Subtype(_)
@@ -653,10 +655,19 @@ pub enum PredicateKind<'tcx> {
653655
/// Used for coherence to mark opaque types as possibly equal to each other but ambiguous.
654656
Ambiguous,
655657

658+
/// The alias normalizes to `term`. Unlike `Projection`, this always fails if the alias
659+
/// cannot be normalized in the current context.
660+
///
661+
/// `Projection(<T as Trait>::Assoc, ?x)` results in `?x == <T as Trait>::Assoc` while
662+
/// `NormalizesTo(<T as Trait>::Assoc, ?x)` results in `NoSolution`.
663+
///
664+
/// Only used in the new solver.
665+
NormalizesTo(ProjectionPredicate<'tcx>),
666+
656667
/// Separate from `Clause::Projection` which is used for normalization in new solver.
657668
/// This predicate requires two terms to be equal to eachother.
658669
///
659-
/// Only used for new solver
670+
/// Only used in the new solver.
660671
AliasRelate(Term<'tcx>, Term<'tcx>, AliasRelationDirection),
661672
}
662673

@@ -1320,6 +1331,7 @@ impl<'tcx> Predicate<'tcx> {
13201331
PredicateKind::Clause(Clause::Trait(t)) => Some(predicate.rebind(t)),
13211332
PredicateKind::Clause(Clause::Projection(..))
13221333
| PredicateKind::Clause(Clause::ConstArgHasType(..))
1334+
| PredicateKind::NormalizesTo(..)
13231335
| PredicateKind::AliasRelate(..)
13241336
| PredicateKind::Subtype(..)
13251337
| PredicateKind::Coerce(..)
@@ -1341,6 +1353,7 @@ impl<'tcx> Predicate<'tcx> {
13411353
PredicateKind::Clause(Clause::Projection(t)) => Some(predicate.rebind(t)),
13421354
PredicateKind::Clause(Clause::Trait(..))
13431355
| PredicateKind::Clause(Clause::ConstArgHasType(..))
1356+
| PredicateKind::NormalizesTo(..)
13441357
| PredicateKind::AliasRelate(..)
13451358
| PredicateKind::Subtype(..)
13461359
| PredicateKind::Coerce(..)
@@ -1363,6 +1376,7 @@ impl<'tcx> Predicate<'tcx> {
13631376
PredicateKind::Clause(Clause::Trait(..))
13641377
| PredicateKind::Clause(Clause::ConstArgHasType(..))
13651378
| PredicateKind::Clause(Clause::Projection(..))
1379+
| PredicateKind::NormalizesTo(..)
13661380
| PredicateKind::AliasRelate(..)
13671381
| PredicateKind::Subtype(..)
13681382
| PredicateKind::Coerce(..)

compiler/rustc_middle/src/ty/print/pretty.rs

+3
Original file line numberDiff line numberDiff line change
@@ -2896,6 +2896,9 @@ define_print_and_forward_display! {
28962896
p!("the type `", print(ty), "` is found in the environment")
28972897
}
28982898
ty::PredicateKind::Ambiguous => p!("ambiguous"),
2899+
ty::PredicateKind::NormalizesTo(ty::ProjectionPredicate { projection_ty, term }) => {
2900+
p!("`", print(projection_ty), "` normalizes to `", print(term), "`")
2901+
}
28992902
ty::PredicateKind::AliasRelate(t1, t2, dir) => p!(print(t1), write(" {} ", dir), print(t2)),
29002903
}
29012904
}

compiler/rustc_middle/src/ty/structural_impls.rs

+3
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,9 @@ impl<'tcx> fmt::Debug for ty::PredicateKind<'tcx> {
204204
write!(f, "TypeWellFormedFromEnv({:?})", ty)
205205
}
206206
ty::PredicateKind::Ambiguous => write!(f, "Ambiguous"),
207+
ty::PredicateKind::NormalizesTo(ty::ProjectionPredicate { projection_ty, term }) => {
208+
write!(f, "NormalizesTo({projection_ty:?}, {term:?})")
209+
}
207210
ty::PredicateKind::AliasRelate(t1, t2, dir) => {
208211
write!(f, "AliasRelate({t1:?}, {dir:?}, {t2:?})")
209212
}

compiler/rustc_privacy/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ where
192192
| ty::PredicateKind::ConstEquate(_, _)
193193
| ty::PredicateKind::TypeWellFormedFromEnv(_)
194194
| ty::PredicateKind::Ambiguous
195+
| ty::PredicateKind::NormalizesTo(..)
195196
| ty::PredicateKind::AliasRelate(..) => bug!("unexpected predicate: {:?}", predicate),
196197
}
197198
}

compiler/rustc_trait_selection/src/solve/eval_ctxt.rs

+3
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,9 @@ impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
332332
ty::PredicateKind::TypeWellFormedFromEnv(..) => {
333333
bug!("TypeWellFormedFromEnv is only used for Chalk")
334334
}
335+
ty::PredicateKind::NormalizesTo(predicate) => {
336+
self.compute_projection_goal(Goal { param_env, predicate })
337+
}
335338
ty::PredicateKind::AliasRelate(lhs, rhs, direction) => self
336339
.compute_alias_relate_goal(Goal {
337340
param_env,

compiler/rustc_trait_selection/src/solve/fulfill.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ impl<'tcx> TraitEngine<'tcx> for FulfillmentCtxt<'tcx> {
8787
errors.push(FulfillmentError {
8888
obligation: obligation.clone(),
8989
code: match goal.predicate.kind().skip_binder() {
90-
ty::PredicateKind::Clause(ty::Clause::Projection(_)) => {
90+
ty::PredicateKind::Clause(ty::Clause::Projection(_))
91+
| ty::PredicateKind::NormalizesTo(..) => {
9192
FulfillmentErrorCode::CodeProjectionError(
9293
// FIXME: This could be a `Sorts` if the term is a type
9394
MismatchedProjectionTypes { err: TypeError::Mismatch },

compiler/rustc_trait_selection/src/traits/auto_trait.rs

+1
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,7 @@ impl<'tcx> AutoTraitFinder<'tcx> {
828828
// the `ParamEnv`.
829829
ty::PredicateKind::WellFormed(..)
830830
| ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..))
831+
| ty::PredicateKind::NormalizesTo(..)
831832
| ty::PredicateKind::AliasRelate(..)
832833
| ty::PredicateKind::ObjectSafe(..)
833834
| ty::PredicateKind::ClosureKind(..)

compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs

+5
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,11 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
10981098
"TypeWellFormedFromEnv predicate should only exist in the environment"
10991099
),
11001100

1101+
ty::PredicateKind::NormalizesTo(..) => span_bug!(
1102+
span,
1103+
"NormalizesTo predicate should never be the predicate cause of a SelectionError"
1104+
),
1105+
11011106
ty::PredicateKind::AliasRelate(..) => span_bug!(
11021107
span,
11031108
"AliasRelate predicate should never be the predicate cause of a SelectionError"

compiler/rustc_trait_selection/src/traits/fulfill.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,8 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
369369
ty::PredicateKind::TypeWellFormedFromEnv(..) => {
370370
bug!("TypeWellFormedFromEnv is only used for Chalk")
371371
}
372-
ty::PredicateKind::AliasRelate(..) => {
373-
bug!("AliasRelate is only used for new solver")
372+
ty::PredicateKind::NormalizesTo(..) | ty::PredicateKind::AliasRelate(..) => {
373+
bug!("predicate only used by new solver: {:?}", obligation.predicate)
374374
}
375375
},
376376
Some(pred) => match pred {
@@ -637,8 +637,8 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
637637
ty::PredicateKind::TypeWellFormedFromEnv(..) => {
638638
bug!("TypeWellFormedFromEnv is only used for Chalk")
639639
}
640-
ty::PredicateKind::AliasRelate(..) => {
641-
bug!("AliasRelate is only used for new solver")
640+
ty::PredicateKind::NormalizesTo(..) | ty::PredicateKind::AliasRelate(..) => {
641+
bug!("predicate only used by new solver: {:?}", obligation.predicate)
642642
}
643643
ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(ct, ty)) => {
644644
match self.selcx.infcx.at(&obligation.cause, obligation.param_env).eq(

compiler/rustc_trait_selection/src/traits/object_safety.rs

+11-7
Original file line numberDiff line numberDiff line change
@@ -308,20 +308,23 @@ fn predicate_references_self<'tcx>(
308308
has_self_ty(&ty.into()).then_some(sp)
309309
}
310310

311-
ty::PredicateKind::AliasRelate(..) => bug!("`AliasRelate` not allowed as assumption"),
312-
313311
ty::PredicateKind::WellFormed(..)
314-
| ty::PredicateKind::ObjectSafe(..)
315312
| ty::PredicateKind::Clause(ty::Clause::TypeOutlives(..))
316313
| ty::PredicateKind::Clause(ty::Clause::RegionOutlives(..))
314+
// FIXME(generic_const_exprs): this can mention `Self`
315+
| ty::PredicateKind::ConstEvaluatable(..) => None,
316+
317+
ty::PredicateKind::ObjectSafe(_)
317318
| ty::PredicateKind::ClosureKind(..)
318319
| ty::PredicateKind::Subtype(..)
319320
| ty::PredicateKind::Coerce(..)
320-
// FIXME(generic_const_exprs): this can mention `Self`
321-
| ty::PredicateKind::ConstEvaluatable(..)
322321
| ty::PredicateKind::ConstEquate(..)
323322
| ty::PredicateKind::Ambiguous
324-
| ty::PredicateKind::TypeWellFormedFromEnv(..) => None,
323+
| ty::PredicateKind::NormalizesTo(..)
324+
| ty::PredicateKind::AliasRelate(..)
325+
| ty::PredicateKind::TypeWellFormedFromEnv(..) => {
326+
bug!("should only check where-clauses for object safety: {predicate:?}")
327+
}
325328
}
326329
}
327330

@@ -349,7 +352,7 @@ fn generics_require_sized_self(tcx: TyCtxt<'_>, def_id: DefId) -> bool {
349352
return false; /* No Sized trait, can't require it! */
350353
};
351354

352-
// Search for a predicate like `Self : Sized` amongst the trait bounds.
355+
// Search for a predicate like `Self: Sized` amongst the trait bounds.
353356
let predicates = tcx.predicates_of(def_id);
354357
let predicates = predicates.instantiate_identity(tcx).predicates;
355358
elaborate(tcx, predicates.into_iter()).any(|pred| match pred.kind().skip_binder() {
@@ -367,6 +370,7 @@ fn generics_require_sized_self(tcx: TyCtxt<'_>, def_id: DefId) -> bool {
367370
| ty::PredicateKind::Clause(ty::Clause::TypeOutlives(..))
368371
| ty::PredicateKind::ConstEvaluatable(..)
369372
| ty::PredicateKind::ConstEquate(..)
373+
| ty::PredicateKind::NormalizesTo(..)
370374
| ty::PredicateKind::AliasRelate(..)
371375
| ty::PredicateKind::Ambiguous
372376
| ty::PredicateKind::TypeWellFormedFromEnv(..) => false,

compiler/rustc_trait_selection/src/traits/query/type_op/implied_outlives_bounds.rs

+1
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ pub fn compute_implied_outlives_bounds_inner<'tcx>(
133133
| ty::PredicateKind::ConstEvaluatable(..)
134134
| ty::PredicateKind::ConstEquate(..)
135135
| ty::PredicateKind::Ambiguous
136+
| ty::PredicateKind::NormalizesTo(..)
136137
| ty::PredicateKind::AliasRelate(..)
137138
| ty::PredicateKind::TypeWellFormedFromEnv(..) => {}
138139

compiler/rustc_trait_selection/src/traits/select/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -983,8 +983,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
983983
ty::PredicateKind::TypeWellFormedFromEnv(..) => {
984984
bug!("TypeWellFormedFromEnv is only used for chalk")
985985
}
986-
ty::PredicateKind::AliasRelate(..) => {
987-
bug!("AliasRelate is only used for new solver")
986+
ty::PredicateKind::NormalizesTo(..) | ty::PredicateKind::AliasRelate(..) => {
987+
bug!("predicate only used by new solver: {bound_predicate:?}")
988988
}
989989
ty::PredicateKind::Ambiguous => Ok(EvaluatedToAmbig),
990990
ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(ct, ty)) => {

compiler/rustc_trait_selection/src/traits/wf.rs

+2
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ pub fn predicate_obligations<'tcx>(
174174
| ty::PredicateKind::Coerce(..)
175175
| ty::PredicateKind::ConstEquate(..)
176176
| ty::PredicateKind::Ambiguous
177+
| ty::PredicateKind::NormalizesTo(..)
177178
| ty::PredicateKind::AliasRelate(..)
178179
| ty::PredicateKind::TypeWellFormedFromEnv(..) => {
179180
bug!("We should only wf check where clauses, unexpected predicate: {predicate:?}")
@@ -971,6 +972,7 @@ pub(crate) fn required_region_bounds<'tcx>(
971972
| ty::PredicateKind::ConstEvaluatable(..)
972973
| ty::PredicateKind::ConstEquate(..)
973974
| ty::PredicateKind::Ambiguous
975+
| ty::PredicateKind::NormalizesTo(..)
974976
| ty::PredicateKind::AliasRelate(..)
975977
| ty::PredicateKind::TypeWellFormedFromEnv(..) => None,
976978
ty::PredicateKind::Clause(ty::Clause::TypeOutlives(ty::OutlivesPredicate(

compiler/rustc_traits/src/chalk/lowering.rs

+4
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::InEnvironment<chalk_ir::Goal<RustInterner<'
133133
},
134134
ty::PredicateKind::ObjectSafe(..)
135135
| ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..))
136+
| ty::PredicateKind::NormalizesTo(..)
136137
| ty::PredicateKind::AliasRelate(..)
137138
| ty::PredicateKind::ClosureKind(..)
138139
| ty::PredicateKind::Subtype(..)
@@ -229,6 +230,7 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::GoalData<RustInterner<'tcx>>> for ty::Predi
229230
// some of these in terms of chalk operations.
230231
ty::PredicateKind::ClosureKind(..)
231232
| ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..))
233+
| ty::PredicateKind::NormalizesTo(..)
232234
| ty::PredicateKind::AliasRelate(..)
233235
| ty::PredicateKind::Coerce(..)
234236
| ty::PredicateKind::ConstEvaluatable(..)
@@ -675,6 +677,7 @@ impl<'tcx> LowerInto<'tcx, Option<chalk_ir::QuantifiedWhereClause<RustInterner<'
675677
ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..)) => None,
676678

677679
ty::PredicateKind::ObjectSafe(..)
680+
| ty::PredicateKind::NormalizesTo(..)
678681
| ty::PredicateKind::AliasRelate(..)
679682
| ty::PredicateKind::ClosureKind(..)
680683
| ty::PredicateKind::Subtype(..)
@@ -810,6 +813,7 @@ impl<'tcx> LowerInto<'tcx, Option<chalk_solve::rust_ir::QuantifiedInlineBound<Ru
810813
ty::PredicateKind::Clause(ty::Clause::ConstArgHasType(..)) => None,
811814

812815
ty::PredicateKind::Clause(ty::Clause::RegionOutlives(..))
816+
| ty::PredicateKind::NormalizesTo(..)
813817
| ty::PredicateKind::AliasRelate(..)
814818
| ty::PredicateKind::ObjectSafe(..)
815819
| ty::PredicateKind::ClosureKind(..)

0 commit comments

Comments
 (0)