@@ -5,7 +5,8 @@ use crate::{ExClause, Literal, TimeStamp};
55use chalk_ir:: debug;
66use chalk_ir:: interner:: Interner ;
77use chalk_ir:: {
8- Environment , Fallible , Goal , GoalData , InEnvironment , QuantifierKind , Substitution ,
8+ Constraint , DomainGoal , Environment , Fallible , Goal , GoalData , InEnvironment , LifetimeOutlives ,
9+ QuantifierKind , Substitution , WhereClause ,
910} ;
1011
1112impl < I : Interner , C : Context < I > > Forest < I , C > {
@@ -68,14 +69,22 @@ impl<I: Interner, C: Context<I>> Forest<I, C> {
6869 & goal. b ,
6970 & mut ex_clause,
7071 ) ?,
71- GoalData :: DomainGoal ( domain_goal) => {
72- ex_clause
73- . subgoals
74- . push ( Literal :: Positive ( InEnvironment :: new (
72+ GoalData :: DomainGoal ( domain_goal) => match domain_goal {
73+ DomainGoal :: Holds ( WhereClause :: LifetimeOutlives ( LifetimeOutlives { a, b } ) ) => {
74+ ex_clause. constraints . push ( InEnvironment :: new (
7575 & environment,
76- context. into_goal ( domain_goal. clone ( ) ) ,
77- ) ) ) ;
78- }
76+ Constraint :: Outlives ( a. clone ( ) , b. clone ( ) ) ,
77+ ) ) ;
78+ }
79+ _ => {
80+ ex_clause
81+ . subgoals
82+ . push ( Literal :: Positive ( InEnvironment :: new (
83+ & environment,
84+ context. into_goal ( domain_goal. clone ( ) ) ,
85+ ) ) ) ;
86+ }
87+ } ,
7988 GoalData :: CannotProve ( ( ) ) => {
8089 debug ! ( "Marking Strand as ambiguous because of a `CannotProve` subgoal" ) ;
8190 ex_clause. ambiguous = true ;
0 commit comments