Skip to content

Commit ace9146

Browse files
committed
Bubble defining use anchor out of fully_solve_obligations
1 parent 60ac06e commit ace9146

File tree

6 files changed

+18
-5
lines changed

6 files changed

+18
-5
lines changed

compiler/rustc_const_eval/src/transform/check_consts/qualifs.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,12 @@ impl Qualif for NeedsNonConstDrop {
184184
}
185185

186186
// If we had any errors, then it's bad
187-
!traits::fully_solve_obligations(&infcx, impl_src.nested_obligations()).is_empty()
187+
!traits::fully_solve_obligations(
188+
&infcx,
189+
impl_src.nested_obligations(),
190+
rustc_infer::infer::DefiningAnchor::Error,
191+
)
192+
.is_empty()
188193
}
189194

190195
fn in_adt_inherently<'tcx>(

compiler/rustc_hir_analysis/src/coherence/builtin.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ fn visit_implementation_of_dispatch_from_dyn(tcx: TyCtxt<'_>, impl_did: LocalDef
335335
[field.ty(tcx, substs_a), field.ty(tcx, substs_b)],
336336
)
337337
}),
338+
infer::DefiningAnchor::Error,
338339
);
339340
if !errors.is_empty() {
340341
infcx.err_ctxt().report_fulfillment_errors(&errors, None);

compiler/rustc_hir_analysis/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,11 @@ fn require_same_types<'tcx>(
166166
let infcx = &tcx.infer_ctxt().build();
167167
let param_env = ty::ParamEnv::empty();
168168
let errors = match infcx.at(cause, param_env).eq(expected, actual) {
169-
Ok(InferOk { obligations, .. }) => traits::fully_solve_obligations(infcx, obligations),
169+
Ok(InferOk { obligations, .. }) => traits::fully_solve_obligations(
170+
infcx,
171+
obligations,
172+
rustc_infer::infer::DefiningAnchor::Error,
173+
),
170174
Err(err) => {
171175
infcx.err_ctxt().report_mismatched_types(cause, expected, actual, err).emit();
172176
return false;

compiler/rustc_trait_selection/src/traits/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use crate::infer::{InferCtxt, TyCtxtInferExt};
2626
use crate::traits::error_reporting::TypeErrCtxtExt as _;
2727
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
2828
use rustc_errors::ErrorGuaranteed;
29+
use rustc_infer::infer::DefiningAnchor;
2930
use rustc_middle::ty::fold::TypeFoldable;
3031
use rustc_middle::ty::visit::{TypeVisitable, TypeVisitableExt};
3132
use rustc_middle::ty::{self, DefIdTree, ToPredicate, Ty, TyCtxt, TypeSuperVisitable};
@@ -393,16 +394,17 @@ pub fn fully_solve_obligation<'tcx>(
393394
infcx: &InferCtxt<'tcx>,
394395
obligation: PredicateObligation<'tcx>,
395396
) -> Vec<FulfillmentError<'tcx>> {
396-
fully_solve_obligations(infcx, [obligation])
397+
fully_solve_obligations(infcx, [obligation], infcx.old_defining_use_anchor)
397398
}
398399

399400
/// Process a set of obligations (and any nested obligations that come from them)
400401
/// to completion
401402
pub fn fully_solve_obligations<'tcx>(
402403
infcx: &InferCtxt<'tcx>,
403404
obligations: impl IntoIterator<Item = PredicateObligation<'tcx>>,
405+
defining_use_anchor: DefiningAnchor,
404406
) -> Vec<FulfillmentError<'tcx>> {
405-
let ocx = ObligationCtxt::new(infcx).with_defining_use_anchor(infcx.old_defining_use_anchor);
407+
let ocx = ObligationCtxt::new(infcx).with_defining_use_anchor(defining_use_anchor);
406408
ocx.register_obligations(obligations);
407409
ocx.select_all_or_error()
408410
}

compiler/rustc_trait_selection/src/traits/outlives_bounds.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ impl<'a, 'tcx: 'a> InferCtxtExt<'a, 'tcx> for InferCtxt<'tcx> {
8383
param_env,
8484
)
8585
}),
86+
self.old_defining_use_anchor,
8687
);
8788
if !constraints.member_constraints.is_empty() {
8889
span_bug!(span, "{:#?}", constraints.member_constraints);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ pub fn scrape_region_constraints<'tcx, Op: super::TypeOp<'tcx, Output = R>, R>(
7373
);
7474

7575
let InferOk { value, obligations } = infcx.commit_if_ok(|_| op())?;
76-
let errors = traits::fully_solve_obligations(infcx, obligations);
76+
let errors = traits::fully_solve_obligations(infcx, obligations, infcx.old_defining_use_anchor);
7777
if !errors.is_empty() {
7878
infcx.tcx.sess.diagnostic().delay_span_bug(
7979
DUMMY_SP,

0 commit comments

Comments
 (0)