11use rustc_errors:: Diag ;
2+ use rustc_hir:: def_id:: LocalDefId ;
23use rustc_infer:: infer:: canonical:: Canonical ;
34use rustc_infer:: infer:: error_reporting:: nice_region_error:: NiceRegionError ;
45use rustc_infer:: infer:: region_constraints:: Constraint ;
@@ -241,7 +242,7 @@ impl<'tcx> TypeOpInfo<'tcx> for PredicateQuery<'tcx> {
241242 mbcx. infcx . tcx . infer_ctxt ( ) . build_with_canonical ( cause. span , & self . canonical_query ) ;
242243 let ocx = ObligationCtxt :: new ( & infcx) ;
243244 type_op_prove_predicate_with_cause ( & ocx, key, cause) ;
244- try_extract_error_from_fulfill_cx ( & ocx, placeholder_region, error_region)
245+ try_extract_error_from_fulfill_cx ( & ocx, mbcx . mir_def_id ( ) , placeholder_region, error_region)
245246 }
246247}
247248
@@ -287,7 +288,7 @@ where
287288 let ( param_env, value) = key. into_parts ( ) ;
288289 let _ = ocx. normalize ( & cause, param_env, value. value ) ;
289290
290- try_extract_error_from_fulfill_cx ( & ocx, placeholder_region, error_region)
291+ try_extract_error_from_fulfill_cx ( & ocx, mbcx . mir_def_id ( ) , placeholder_region, error_region)
291292 }
292293}
293294
@@ -318,7 +319,7 @@ impl<'tcx> TypeOpInfo<'tcx> for AscribeUserTypeQuery<'tcx> {
318319 mbcx. infcx . tcx . infer_ctxt ( ) . build_with_canonical ( cause. span , & self . canonical_query ) ;
319320 let ocx = ObligationCtxt :: new ( & infcx) ;
320321 type_op_ascribe_user_type_with_span ( & ocx, key, Some ( cause. span ) ) . ok ( ) ?;
321- try_extract_error_from_fulfill_cx ( & ocx, placeholder_region, error_region)
322+ try_extract_error_from_fulfill_cx ( & ocx, mbcx . mir_def_id ( ) , placeholder_region, error_region)
322323 }
323324}
324325
@@ -342,6 +343,7 @@ impl<'tcx> TypeOpInfo<'tcx> for crate::type_check::InstantiateOpaqueType<'tcx> {
342343 ) -> Option < Diag < ' tcx > > {
343344 try_extract_error_from_region_constraints (
344345 mbcx. infcx ,
346+ mbcx. mir_def_id ( ) ,
345347 placeholder_region,
346348 error_region,
347349 self . region_constraints . as_ref ( ) . unwrap ( ) ,
@@ -358,6 +360,7 @@ impl<'tcx> TypeOpInfo<'tcx> for crate::type_check::InstantiateOpaqueType<'tcx> {
358360#[ instrument( skip( ocx) , level = "debug" ) ]
359361fn try_extract_error_from_fulfill_cx < ' tcx > (
360362 ocx : & ObligationCtxt < ' _ , ' tcx > ,
363+ generic_param_scope : LocalDefId ,
361364 placeholder_region : ty:: Region < ' tcx > ,
362365 error_region : Option < ty:: Region < ' tcx > > ,
363366) -> Option < Diag < ' tcx > > {
@@ -368,6 +371,7 @@ fn try_extract_error_from_fulfill_cx<'tcx>(
368371 let region_constraints = ocx. infcx . with_region_constraints ( |r| r. clone ( ) ) ;
369372 try_extract_error_from_region_constraints (
370373 ocx. infcx ,
374+ generic_param_scope,
371375 placeholder_region,
372376 error_region,
373377 & region_constraints,
@@ -379,6 +383,7 @@ fn try_extract_error_from_fulfill_cx<'tcx>(
379383#[ instrument( level = "debug" , skip( infcx, region_var_origin, universe_of_region) ) ]
380384fn try_extract_error_from_region_constraints < ' tcx > (
381385 infcx : & InferCtxt < ' tcx > ,
386+ generic_param_scope : LocalDefId ,
382387 placeholder_region : ty:: Region < ' tcx > ,
383388 error_region : Option < ty:: Region < ' tcx > > ,
384389 region_constraints : & RegionConstraintData < ' tcx > ,
@@ -452,15 +457,18 @@ fn try_extract_error_from_region_constraints<'tcx>(
452457 RegionResolutionError :: ConcreteFailure ( cause. clone ( ) , sub_region, placeholder_region)
453458 }
454459 } ;
455- NiceRegionError :: new ( & infcx. err_ctxt ( ) , error) . try_report_from_nll ( ) . or_else ( || {
456- if let SubregionOrigin :: Subtype ( trace) = cause {
457- Some (
458- infcx
459- . err_ctxt ( )
460- . report_and_explain_type_error ( * trace, TypeError :: RegionsPlaceholderMismatch ) ,
461- )
462- } else {
463- None
464- }
465- } )
460+ NiceRegionError :: new ( & infcx. err_ctxt ( ) , generic_param_scope, error)
461+ . try_report_from_nll ( )
462+ . or_else ( || {
463+ if let SubregionOrigin :: Subtype ( trace) = cause {
464+ Some (
465+ infcx. err_ctxt ( ) . report_and_explain_type_error (
466+ * trace,
467+ TypeError :: RegionsPlaceholderMismatch ,
468+ ) ,
469+ )
470+ } else {
471+ None
472+ }
473+ } )
466474}
0 commit comments