@@ -13,8 +13,8 @@ use crate::{
1313use chalk_ir:: interner:: Interner ;
1414use chalk_ir:: { debug, debug_heading, info, info_heading} ;
1515use chalk_ir:: {
16- Canonical , ConstrainedSubst , Floundered , Goal , GoalData , InEnvironment , NoSolution ,
17- Substitution , UCanonical , UniverseMap ,
16+ Canonical , ConstrainedSubst , DomainGoal , Floundered , Goal , GoalData , InEnvironment , NoSolution ,
17+ Substitution , UCanonical , UniverseMap , WhereClause ,
1818} ;
1919
2020type RootSearchResult < T > = Result < T , RootSearchFail > ;
@@ -251,8 +251,18 @@ impl<I: Interner, C: Context<I>> Forest<I, C> {
251251 ) -> Table < I > {
252252 let mut table = Table :: new ( goal. clone ( ) , context. is_coinductive ( & goal) ) ;
253253 let ( mut infer, subst, environment, goal) = context. instantiate_ucanonical_goal ( & goal) ;
254- match goal. data ( context. interner ( ) ) {
255- GoalData :: DomainGoal ( domain_goal) => {
254+ let goal_data = goal. data ( context. interner ( ) ) ;
255+
256+ let is_outlives_goal = |dg : & DomainGoal < I > | {
257+ if let DomainGoal :: Holds ( WhereClause :: LifetimeOutlives ( _) ) = dg {
258+ true
259+ } else {
260+ false
261+ }
262+ } ;
263+
264+ match goal_data {
265+ GoalData :: DomainGoal ( domain_goal) if !is_outlives_goal ( domain_goal) => {
256266 match context. program_clauses ( & environment, & domain_goal, & mut infer) {
257267 Ok ( clauses) => {
258268 for clause in clauses {
0 commit comments