@@ -238,7 +238,13 @@ fn program_clauses_that_could_match<I: Interner>(
238238 }
239239
240240 if let Some ( well_known) = trait_datum. well_known {
241- builtin_traits:: add_builtin_program_clauses ( db, builder, well_known, trait_ref, self_ty. data ( interner) ) ;
241+ builtin_traits:: add_builtin_program_clauses (
242+ db,
243+ builder,
244+ well_known,
245+ trait_ref,
246+ self_ty. data ( interner) ,
247+ ) ;
242248 }
243249 }
244250 DomainGoal :: Holds ( WhereClause :: AliasEq ( alias_predicate) ) => {
@@ -346,16 +352,21 @@ fn match_ty<I: Interner>(
346352 let interner = builder. interner ( ) ;
347353 match ty. data ( interner) {
348354 TyData :: Apply ( application_ty) => match_type_name ( builder, application_ty. name ) ,
349- TyData :: Placeholder ( _) => { }
355+ TyData :: Placeholder ( _) => {
356+ builder. push_clause ( WellFormed :: Ty ( ty. clone ( ) ) , Some ( FromEnv :: Ty ( ty. clone ( ) ) ) ) ;
357+ }
350358 TyData :: Alias ( alias_ty) => builder
351359 . db
352360 . associated_ty_data ( alias_ty. associated_ty_id )
353361 . to_program_clauses ( builder) ,
354- TyData :: Function ( quantified_ty) => quantified_ty
355- . parameters
356- . iter ( )
357- . map ( |p| p. assert_ty_ref ( interner) )
358- . for_each ( |ty| match_ty ( builder, environment, & ty) ) ,
362+ TyData :: Function ( quantified_ty) => {
363+ builder. push_fact ( WellFormed :: Ty ( ty. clone ( ) ) ) ;
364+ quantified_ty
365+ . parameters
366+ . iter ( )
367+ . map ( |p| p. assert_ty_ref ( interner) )
368+ . for_each ( |ty| match_ty ( builder, environment, & ty) )
369+ }
359370 TyData :: BoundVar ( _) => { }
360371 TyData :: InferenceVar ( _) => panic ! ( "should have floundered" ) ,
361372 TyData :: Dyn ( _) => { }
0 commit comments