11use super :: { builder:: ClauseBuilder , generalize} ;
22use crate :: { Interner , RustIrDatabase , TraitRef , WellKnownTrait } ;
3- use chalk_ir:: { Substitution , Ty } ;
3+ use chalk_ir:: { Floundered , Substitution , Ty } ;
44
55mod clone;
66mod copy;
@@ -14,7 +14,7 @@ pub fn add_builtin_program_clauses<I: Interner>(
1414 builder : & mut ClauseBuilder < ' _ , I > ,
1515 well_known : WellKnownTrait ,
1616 trait_ref : & TraitRef < I > ,
17- ) {
17+ ) -> Result < ( ) , Floundered > {
1818 // If `trait_ref` contains bound vars, we want to universally quantify them.
1919 // `Generalize` collects them for us.
2020 let generalized = generalize:: Generalize :: apply ( db. interner ( ) , trait_ref) ;
@@ -26,20 +26,21 @@ pub fn add_builtin_program_clauses<I: Interner>(
2626 if force_impl {
2727 builder. push_fact ( trait_ref. clone ( ) ) ;
2828 }
29- return ;
29+ return Ok ( ( ) ) ;
3030 }
3131
3232 match well_known {
3333 WellKnownTrait :: Sized => sized:: add_sized_program_clauses ( db, builder, & trait_ref, ty) ,
3434 WellKnownTrait :: Copy => copy:: add_copy_program_clauses ( db, builder, & trait_ref, ty) ,
3535 WellKnownTrait :: Clone => clone:: add_clone_program_clauses ( db, builder, & trait_ref, ty) ,
3636 WellKnownTrait :: FnOnce | WellKnownTrait :: FnMut | WellKnownTrait :: Fn => {
37- fn_family:: add_fn_trait_program_clauses ( db, builder, trait_ref. trait_id , self_ty)
37+ fn_family:: add_fn_trait_program_clauses ( db, builder, trait_ref. trait_id , self_ty) ?
3838 }
3939 // Drop impls are provided explicitly
4040 WellKnownTrait :: Drop => ( ) ,
4141 }
42- } ) ;
42+ Ok ( ( ) )
43+ } )
4344}
4445
4546/// Like `add_builtin_program_clauses`, but for `DomainGoal::Normalize` involving
@@ -49,14 +50,15 @@ pub fn add_builtin_assoc_program_clauses<I: Interner>(
4950 builder : & mut ClauseBuilder < ' _ , I > ,
5051 well_known : WellKnownTrait ,
5152 self_ty : Ty < I > ,
52- ) {
53+ ) -> Result < ( ) , Floundered > {
5354 match well_known {
5455 WellKnownTrait :: FnOnce => {
5556 let trait_id = db. well_known_trait_id ( well_known) . unwrap ( ) ;
56- fn_family:: add_fn_trait_program_clauses ( db, builder, trait_id, self_ty) ;
57+ fn_family:: add_fn_trait_program_clauses ( db, builder, trait_id, self_ty) ? ;
5758 }
5859 _ => { }
5960 }
61+ Ok ( ( ) )
6062}
6163
6264/// Given a trait ref `T0: Trait` and a list of types `U0..Un`, pushes a clause of the form
0 commit comments