Remove `DefId` from `EarlyParamRegion` (tedium/diagnostics) · rust-lang/rust@fe2d779
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);
242243let ocx = ObligationCtxt::new(&infcx);
243244type_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
287288let (param_env, value) = key.into_parts();
288289let _ = ocx.normalize(&cause, param_env, value.value);
289290290-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);
319320let ocx = ObligationCtxt::new(&infcx);
320321type_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>> {
343344try_extract_error_from_region_constraints(
344345 mbcx.infcx,
346+ mbcx.mir_def_id(),
345347 placeholder_region,
346348 error_region,
347349self.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>(
360362ocx: &ObligationCtxt<'_, 'tcx>,
363+generic_param_scope: LocalDefId,
361364placeholder_region: ty::Region<'tcx>,
362365error_region: Option<ty::Region<'tcx>>,
363366) -> Option<Diag<'tcx>> {
@@ -368,6 +371,7 @@ fn try_extract_error_from_fulfill_cx<'tcx>(
368371let region_constraints = ocx.infcx.with_region_constraints(|r| r.clone());
369372try_extract_error_from_region_constraints(
370373 ocx.infcx,
374+ generic_param_scope,
371375 placeholder_region,
372376 error_region,
373377®ion_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>(
381385infcx: &InferCtxt<'tcx>,
386+generic_param_scope: LocalDefId,
382387placeholder_region: ty::Region<'tcx>,
383388error_region: Option<ty::Region<'tcx>>,
384389region_constraints: &RegionConstraintData<'tcx>,
@@ -452,15 +457,18 @@ fn try_extract_error_from_region_constraints<'tcx>(
452457RegionResolutionError::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}