Skip to content

Commit 6e1690a

Browse files
Pass spans to perform_locally_in_new_solver
1 parent 203e6c1 commit 6e1690a

File tree

11 files changed

+34
-20
lines changed

11 files changed

+34
-20
lines changed

compiler/rustc_borrowck/src/diagnostics/bound_region_errors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ impl<'tcx> TypeOpInfo<'tcx> for AscribeUserTypeQuery<'tcx> {
310310
let (infcx, key, _) =
311311
mbcx.infcx.tcx.infer_ctxt().build_with_canonical(cause.span, &self.canonical_query);
312312
let ocx = ObligationCtxt::new(&infcx);
313-
type_op_ascribe_user_type_with_span(&ocx, key, Some(cause.span)).ok()?;
313+
type_op_ascribe_user_type_with_span(&ocx, key, cause.span).ok()?;
314314
let diag = try_extract_error_from_fulfill_cx(
315315
&ocx,
316316
mbcx.mir_def_id(),

compiler/rustc_trait_selection/src/traits/query/dropck_outlives.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ pub fn trivial_dropck_outlives<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> bool {
9090
pub fn compute_dropck_outlives_inner<'tcx>(
9191
ocx: &ObligationCtxt<'_, 'tcx>,
9292
goal: ParamEnvAnd<'tcx, DropckOutlives<'tcx>>,
93+
span: Span,
9394
) -> Result<DropckOutlivesResult<'tcx>, NoSolution> {
9495
let tcx = ocx.infcx.tcx;
9596
let ParamEnvAnd { param_env, value: DropckOutlives { dropped_ty } } = goal;
@@ -135,7 +136,7 @@ pub fn compute_dropck_outlives_inner<'tcx>(
135136
// Set used to detect infinite recursion.
136137
let mut ty_set = FxHashSet::default();
137138

138-
let cause = ObligationCause::dummy();
139+
let cause = ObligationCause::dummy_with_span(span);
139140
let mut constraints = DropckConstraint::empty();
140141
while let Some((ty, depth)) = ty_stack.pop() {
141142
debug!(

compiler/rustc_trait_selection/src/traits/query/type_op/ascribe_user_type.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ impl<'tcx> super::QueryTypeOp<'tcx> for AscribeUserType<'tcx> {
3030
fn perform_locally_with_next_solver(
3131
ocx: &ObligationCtxt<'_, 'tcx>,
3232
key: ParamEnvAnd<'tcx, Self>,
33+
span: Span,
3334
) -> Result<Self::QueryResponse, NoSolution> {
34-
type_op_ascribe_user_type_with_span(ocx, key, None)
35+
type_op_ascribe_user_type_with_span(ocx, key, span)
3536
}
3637
}
3738

@@ -41,11 +42,10 @@ impl<'tcx> super::QueryTypeOp<'tcx> for AscribeUserType<'tcx> {
4142
pub fn type_op_ascribe_user_type_with_span<'tcx>(
4243
ocx: &ObligationCtxt<'_, 'tcx>,
4344
key: ParamEnvAnd<'tcx, AscribeUserType<'tcx>>,
44-
span: Option<Span>,
45+
span: Span,
4546
) -> Result<(), NoSolution> {
4647
let (param_env, AscribeUserType { mir_ty, user_ty }) = key.into_parts();
4748
debug!("type_op_ascribe_user_type: mir_ty={:?} user_ty={:?}", mir_ty, user_ty);
48-
let span = span.unwrap_or(DUMMY_SP);
4949
match user_ty.kind {
5050
UserTypeKind::Ty(user_ty) => relate_mir_and_user_ty(ocx, param_env, span, mir_ty, user_ty)?,
5151
UserTypeKind::TypeOf(def_id, user_args) => {

compiler/rustc_trait_selection/src/traits/query/type_op/implied_outlives_bounds.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rustc_infer::traits::query::type_op::ImpliedOutlivesBounds;
55
use rustc_middle::infer::canonical::CanonicalQueryResponse;
66
use rustc_middle::traits::ObligationCause;
77
use rustc_middle::ty::{self, ParamEnvAnd, Ty, TyCtxt, TypeFolder, TypeVisitableExt};
8-
use rustc_span::DUMMY_SP;
8+
use rustc_span::Span;
99
use rustc_span::def_id::CRATE_DEF_ID;
1010
use rustc_type_ir::outlives::{Component, push_outlives_components};
1111
use smallvec::{SmallVec, smallvec};
@@ -45,11 +45,12 @@ impl<'tcx> super::QueryTypeOp<'tcx> for ImpliedOutlivesBounds<'tcx> {
4545
fn perform_locally_with_next_solver(
4646
ocx: &ObligationCtxt<'_, 'tcx>,
4747
key: ParamEnvAnd<'tcx, Self>,
48+
span: Span,
4849
) -> Result<Self::QueryResponse, NoSolution> {
4950
if ocx.infcx.tcx.sess.opts.unstable_opts.no_implied_bounds_compat {
50-
compute_implied_outlives_bounds_inner(ocx, key.param_env, key.value.ty)
51+
compute_implied_outlives_bounds_inner(ocx, key.param_env, key.value.ty, span)
5152
} else {
52-
compute_implied_outlives_bounds_compat_inner(ocx, key.param_env, key.value.ty)
53+
compute_implied_outlives_bounds_compat_inner(ocx, key.param_env, key.value.ty, span)
5354
}
5455
}
5556
}
@@ -58,13 +59,14 @@ pub fn compute_implied_outlives_bounds_inner<'tcx>(
5859
ocx: &ObligationCtxt<'_, 'tcx>,
5960
param_env: ty::ParamEnv<'tcx>,
6061
ty: Ty<'tcx>,
62+
span: Span,
6163
) -> Result<Vec<OutlivesBound<'tcx>>, NoSolution> {
6264
let normalize_op = |ty| -> Result<_, NoSolution> {
6365
// We must normalize the type so we can compute the right outlives components.
6466
// for example, if we have some constrained param type like `T: Trait<Out = U>`,
6567
// and we know that `&'a T::Out` is WF, then we want to imply `U: 'a`.
6668
let ty = ocx
67-
.deeply_normalize(&ObligationCause::dummy(), param_env, ty)
69+
.deeply_normalize(&ObligationCause::dummy_with_span(span), param_env, ty)
6870
.map_err(|_| NoSolution)?;
6971
if !ocx.select_all_or_error().is_empty() {
7072
return Err(NoSolution);
@@ -142,6 +144,7 @@ pub fn compute_implied_outlives_bounds_compat_inner<'tcx>(
142144
ocx: &ObligationCtxt<'_, 'tcx>,
143145
param_env: ty::ParamEnv<'tcx>,
144146
ty: Ty<'tcx>,
147+
span: Span,
145148
) -> Result<Vec<OutlivesBound<'tcx>>, NoSolution> {
146149
let tcx = ocx.infcx.tcx;
147150

@@ -171,8 +174,8 @@ pub fn compute_implied_outlives_bounds_compat_inner<'tcx>(
171174
// FIXME(@lcnr): It's not really "always fine", having fewer implied
172175
// bounds can be backward incompatible, e.g. #101951 was caused by
173176
// us not dealing with inference vars in `TypeOutlives` predicates.
174-
let obligations = wf::obligations(ocx.infcx, param_env, CRATE_DEF_ID, 0, arg, DUMMY_SP)
175-
.unwrap_or_default();
177+
let obligations =
178+
wf::obligations(ocx.infcx, param_env, CRATE_DEF_ID, 0, arg, span).unwrap_or_default();
176179

177180
for obligation in obligations {
178181
debug!(?obligation);
@@ -255,7 +258,7 @@ pub fn compute_implied_outlives_bounds_compat_inner<'tcx>(
255258
// Need to manually normalize in the new solver as `wf::obligations` does not.
256259
if ocx.infcx.next_trait_solver() {
257260
ty_a = ocx
258-
.deeply_normalize(&ObligationCause::dummy(), param_env, ty_a)
261+
.deeply_normalize(&ObligationCause::dummy_with_span(span), param_env, ty_a)
259262
.map_err(|_| NoSolution)?;
260263
}
261264
let mut components = smallvec![];

compiler/rustc_trait_selection/src/traits/query/type_op/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ pub trait QueryTypeOp<'tcx>: fmt::Debug + Copy + TypeFoldable<TyCtxt<'tcx>> + 't
9292
fn perform_locally_with_next_solver(
9393
ocx: &ObligationCtxt<'_, 'tcx>,
9494
key: ParamEnvAnd<'tcx, Self>,
95+
span: Span,
9596
) -> Result<Self::QueryResponse, NoSolution>;
9697

9798
fn fully_perform_into(
@@ -152,7 +153,7 @@ where
152153
if infcx.next_trait_solver() {
153154
return Ok(scrape_region_constraints(
154155
infcx,
155-
|ocx| QueryTypeOp::perform_locally_with_next_solver(ocx, self),
156+
|ocx| QueryTypeOp::perform_locally_with_next_solver(ocx, self, span),
156157
"query type op",
157158
span,
158159
)?

compiler/rustc_trait_selection/src/traits/query/type_op/normalize.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use rustc_middle::traits::query::NoSolution;
55
pub use rustc_middle::traits::query::type_op::Normalize;
66
use rustc_middle::ty::fold::TypeFoldable;
77
use rustc_middle::ty::{self, Lift, ParamEnvAnd, Ty, TyCtxt, TypeVisitableExt};
8+
use rustc_span::Span;
89

910
use crate::infer::canonical::{CanonicalQueryInput, CanonicalQueryResponse};
1011
use crate::traits::ObligationCtxt;
@@ -29,9 +30,10 @@ where
2930
fn perform_locally_with_next_solver(
3031
ocx: &ObligationCtxt<'_, 'tcx>,
3132
key: ParamEnvAnd<'tcx, Self>,
33+
span: Span,
3234
) -> Result<Self::QueryResponse, NoSolution> {
3335
// FIXME(-Znext-solver): shouldn't be using old normalizer
34-
Ok(ocx.normalize(&ObligationCause::dummy(), key.param_env, key.value.value))
36+
Ok(ocx.normalize(&ObligationCause::dummy_with_span(span), key.param_env, key.value.value))
3537
}
3638
}
3739

compiler/rustc_trait_selection/src/traits/query/type_op/outlives.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use rustc_middle::traits::query::{DropckOutlivesResult, NoSolution};
22
use rustc_middle::ty::{ParamEnvAnd, TyCtxt};
3+
use rustc_span::Span;
34

45
use crate::infer::canonical::{CanonicalQueryInput, CanonicalQueryResponse};
56
use crate::traits::ObligationCtxt;
@@ -28,7 +29,8 @@ impl<'tcx> super::QueryTypeOp<'tcx> for DropckOutlives<'tcx> {
2829
fn perform_locally_with_next_solver(
2930
ocx: &ObligationCtxt<'_, 'tcx>,
3031
key: ParamEnvAnd<'tcx, Self>,
32+
span: Span,
3133
) -> Result<Self::QueryResponse, NoSolution> {
32-
compute_dropck_outlives_inner(ocx, key.param_env.and(key.value))
34+
compute_dropck_outlives_inner(ocx, key.param_env.and(key.value), span)
3335
}
3436
}

compiler/rustc_trait_selection/src/traits/query/type_op/prove_predicate.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use rustc_middle::traits::ObligationCause;
44
use rustc_middle::traits::query::NoSolution;
55
pub use rustc_middle::traits::query::type_op::ProvePredicate;
66
use rustc_middle::ty::{self, ParamEnvAnd, TyCtxt};
7+
use rustc_span::Span;
78

89
use crate::infer::canonical::{CanonicalQueryInput, CanonicalQueryResponse};
910
use crate::traits::ObligationCtxt;
@@ -57,10 +58,11 @@ impl<'tcx> super::QueryTypeOp<'tcx> for ProvePredicate<'tcx> {
5758
fn perform_locally_with_next_solver(
5859
ocx: &ObligationCtxt<'_, 'tcx>,
5960
key: ParamEnvAnd<'tcx, Self>,
61+
span: Span,
6062
) -> Result<Self::QueryResponse, NoSolution> {
6163
ocx.register_obligation(Obligation::new(
6264
ocx.infcx.tcx,
63-
ObligationCause::dummy(),
65+
ObligationCause::dummy_with_span(span),
6466
key.param_env,
6567
key.value.predicate,
6668
));

compiler/rustc_traits/src/dropck_outlives.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use rustc_middle::bug;
66
use rustc_middle::query::Providers;
77
use rustc_middle::traits::query::{DropckConstraint, DropckOutlivesResult};
88
use rustc_middle::ty::{self, GenericArgs, TyCtxt};
9+
use rustc_span::DUMMY_SP;
910
use rustc_trait_selection::infer::InferCtxtBuilderExt;
1011
use rustc_trait_selection::traits::query::dropck_outlives::{
1112
compute_dropck_outlives_inner, dtorck_constraint_for_ty_inner,
@@ -24,7 +25,7 @@ fn dropck_outlives<'tcx>(
2425
debug!("dropck_outlives(goal={:#?})", canonical_goal);
2526

2627
tcx.infer_ctxt().enter_canonical_trait_query(&canonical_goal, |ocx, goal| {
27-
compute_dropck_outlives_inner(ocx, goal)
28+
compute_dropck_outlives_inner(ocx, goal, DUMMY_SP)
2829
})
2930
}
3031

compiler/rustc_traits/src/implied_outlives_bounds.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use rustc_infer::traits::query::OutlivesBound;
88
use rustc_infer::traits::query::type_op::ImpliedOutlivesBounds;
99
use rustc_middle::query::Providers;
1010
use rustc_middle::ty::TyCtxt;
11+
use rustc_span::DUMMY_SP;
1112
use rustc_trait_selection::infer::InferCtxtBuilderExt;
1213
use rustc_trait_selection::traits::query::type_op::implied_outlives_bounds::{
1314
compute_implied_outlives_bounds_compat_inner, compute_implied_outlives_bounds_inner,
@@ -28,7 +29,7 @@ fn implied_outlives_bounds_compat<'tcx>(
2829
> {
2930
tcx.infer_ctxt().enter_canonical_trait_query(&goal, |ocx, key| {
3031
let (param_env, ImpliedOutlivesBounds { ty }) = key.into_parts();
31-
compute_implied_outlives_bounds_compat_inner(ocx, param_env, ty)
32+
compute_implied_outlives_bounds_compat_inner(ocx, param_env, ty, DUMMY_SP)
3233
})
3334
}
3435

@@ -41,6 +42,6 @@ fn implied_outlives_bounds<'tcx>(
4142
> {
4243
tcx.infer_ctxt().enter_canonical_trait_query(&goal, |ocx, key| {
4344
let (param_env, ImpliedOutlivesBounds { ty }) = key.into_parts();
44-
compute_implied_outlives_bounds_inner(ocx, param_env, ty)
45+
compute_implied_outlives_bounds_inner(ocx, param_env, ty, DUMMY_SP)
4546
})
4647
}

compiler/rustc_traits/src/type_op.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use rustc_infer::infer::canonical::{Canonical, CanonicalQueryInput, QueryRespons
55
use rustc_middle::query::Providers;
66
use rustc_middle::traits::query::NoSolution;
77
use rustc_middle::ty::{Clause, FnSig, ParamEnvAnd, PolyFnSig, Ty, TyCtxt, TypeFoldable};
8+
use rustc_span::DUMMY_SP;
89
use rustc_trait_selection::infer::InferCtxtBuilderExt;
910
use rustc_trait_selection::traits::query::type_op::ascribe_user_type::{
1011
AscribeUserType, type_op_ascribe_user_type_with_span,
@@ -30,7 +31,7 @@ fn type_op_ascribe_user_type<'tcx>(
3031
canonicalized: CanonicalQueryInput<'tcx, ParamEnvAnd<'tcx, AscribeUserType<'tcx>>>,
3132
) -> Result<&'tcx Canonical<'tcx, QueryResponse<'tcx, ()>>, NoSolution> {
3233
tcx.infer_ctxt().enter_canonical_trait_query(&canonicalized, |ocx, key| {
33-
type_op_ascribe_user_type_with_span(ocx, key, None)
34+
type_op_ascribe_user_type_with_span(ocx, key, DUMMY_SP)
3435
})
3536
}
3637

0 commit comments

Comments
 (0)