@@ -10,10 +10,8 @@ use rustc_hir as hir;
1010use  rustc_hir:: def_id:: { DefId ,  LocalDefId ,  LocalModDefId } ; 
1111use  rustc_hir:: lang_items:: LangItem ; 
1212use  rustc_hir:: ItemKind ; 
13- use  rustc_infer:: infer:: outlives:: env:: { OutlivesEnvironment ,  RegionBoundPairs } ; 
14- use  rustc_infer:: infer:: outlives:: obligations:: TypeOutlives ; 
13+ use  rustc_infer:: infer:: outlives:: env:: OutlivesEnvironment ; 
1514use  rustc_infer:: infer:: { self ,  InferCtxt ,  TyCtxtInferExt } ; 
16- use  rustc_middle:: mir:: ConstraintCategory ; 
1715use  rustc_middle:: query:: Providers ; 
1816use  rustc_middle:: ty:: print:: with_no_trimmed_paths; 
1917use  rustc_middle:: ty:: trait_def:: TraitSpecializationKind ; 
@@ -26,6 +24,7 @@ use rustc_session::parse::feature_err;
2624use  rustc_span:: symbol:: { sym,  Ident ,  Symbol } ; 
2725use  rustc_span:: { Span ,  DUMMY_SP } ; 
2826use  rustc_target:: spec:: abi:: Abi ; 
27+ use  rustc_trait_selection:: regions:: InferCtxtRegionExt ; 
2928use  rustc_trait_selection:: traits:: error_reporting:: TypeErrCtxtExt ; 
3029use  rustc_trait_selection:: traits:: misc:: { 
3130    type_allowed_to_implement_const_param_ty,  ConstParamTyImplementationError , 
@@ -731,10 +730,12 @@ fn ty_known_to_outlive<'tcx>(
731730    ty :  Ty < ' tcx > , 
732731    region :  ty:: Region < ' tcx > , 
733732)  -> bool  { 
734-     resolve_regions_with_wf_tys ( tcx,  id,  param_env,  wf_tys,  |infcx,  region_bound_pairs| { 
735-         let  origin = infer:: RelateParamBound ( DUMMY_SP ,  ty,  None ) ; 
736-         let  outlives = & mut  TypeOutlives :: new ( infcx,  tcx,  region_bound_pairs,  None ,  param_env) ; 
737-         outlives. type_must_outlive ( origin,  ty,  region,  ConstraintCategory :: BoringNoLocation ) ; 
733+     test_region_obligations ( tcx,  id,  param_env,  wf_tys,  |infcx| { 
734+         infcx. register_region_obligation ( infer:: RegionObligation  { 
735+             sub_region :  region, 
736+             sup_type :  ty, 
737+             origin :  infer:: RelateParamBound ( DUMMY_SP ,  ty,  None ) , 
738+         } ) ; 
738739    } ) 
739740} 
740741
@@ -748,40 +749,32 @@ fn region_known_to_outlive<'tcx>(
748749    region_a :  ty:: Region < ' tcx > , 
749750    region_b :  ty:: Region < ' tcx > , 
750751)  -> bool  { 
751-     resolve_regions_with_wf_tys ( tcx,  id,  param_env,  wf_tys,  |mut  infcx,  _| { 
752-         use  rustc_infer:: infer:: outlives:: obligations:: TypeOutlivesDelegate ; 
753-         let  origin = infer:: RelateRegionParamBound ( DUMMY_SP ) ; 
754-         // `region_a: region_b` -> `region_b <= region_a` 
755-         infcx. push_sub_region_constraint ( 
756-             origin, 
757-             region_b, 
758-             region_a, 
759-             ConstraintCategory :: BoringNoLocation , 
760-         ) ; 
752+     test_region_obligations ( tcx,  id,  param_env,  wf_tys,  |infcx| { 
753+         infcx. sub_regions ( infer:: RelateRegionParamBound ( DUMMY_SP ) ,  region_b,  region_a) ; 
761754    } ) 
762755} 
763756
764757/// Given a known `param_env` and a set of well formed types, set up an 
765758/// `InferCtxt`, call the passed function (to e.g. set up region constraints 
766759/// to be tested), then resolve region and return errors 
767- fn  resolve_regions_with_wf_tys < ' tcx > ( 
760+ fn  test_region_obligations < ' tcx > ( 
768761    tcx :  TyCtxt < ' tcx > , 
769762    id :  LocalDefId , 
770763    param_env :  ty:: ParamEnv < ' tcx > , 
771764    wf_tys :  & FxIndexSet < Ty < ' tcx > > , 
772-     add_constraints :  impl  for < ' a >   FnOnce ( & ' a   InferCtxt < ' tcx > ,   & ' a   RegionBoundPairs < ' tcx > ) , 
765+     add_constraints :  impl  FnOnce ( & InferCtxt < ' tcx > ) , 
773766)  -> bool  { 
774767    // Unfortunately, we have to use a new `InferCtxt` each call, because 
775768    // region constraints get added and solved there and we need to test each 
776769    // call individually. 
777770    let  infcx = tcx. infer_ctxt ( ) . build ( ) ; 
771+ 
772+     add_constraints ( & infcx) ; 
773+ 
778774    let  outlives_environment = OutlivesEnvironment :: with_bounds ( 
779775        param_env, 
780776        infcx. implied_bounds_tys ( param_env,  id,  wf_tys) , 
781777    ) ; 
782-     let  region_bound_pairs = outlives_environment. region_bound_pairs ( ) ; 
783- 
784-     add_constraints ( & infcx,  region_bound_pairs) ; 
785778
786779    let  errors = infcx. resolve_regions ( & outlives_environment) ; 
787780    debug ! ( ?errors,  "errors" ) ; 
0 commit comments