@@ -13,8 +13,8 @@ use crate::{
13
13
use chalk_ir:: interner:: Interner ;
14
14
use chalk_ir:: { debug, debug_heading, info, info_heading} ;
15
15
use 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 ,
18
18
} ;
19
19
20
20
type RootSearchResult < T > = Result < T , RootSearchFail > ;
@@ -251,8 +251,18 @@ impl<I: Interner, C: Context<I>> Forest<I, C> {
251
251
) -> Table < I > {
252
252
let mut table = Table :: new ( goal. clone ( ) , context. is_coinductive ( & goal) ) ;
253
253
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) => {
256
266
match context. program_clauses ( & environment, & domain_goal, & mut infer) {
257
267
Ok ( clauses) => {
258
268
for clause in clauses {
0 commit comments