Skip to content

Commit 938434a

Browse files
committed
enable intercrate in the solver InferCtxt
1 parent 47f24a8 commit 938434a

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

compiler/rustc_infer/src/infer/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -585,8 +585,8 @@ impl<'tcx> InferCtxtBuilder<'tcx> {
585585
self
586586
}
587587

588-
pub fn intercrate(mut self) -> Self {
589-
self.intercrate = true;
588+
pub fn intercrate(mut self, intercrate: bool) -> Self {
589+
self.intercrate = intercrate;
590590
self
591591
}
592592

compiler/rustc_trait_selection/src/solve/eval_ctxt.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,14 @@ impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
127127
//
128128
// The actual solver logic happens in `ecx.compute_goal`.
129129
search_graph.with_new_goal(tcx, canonical_goal, |search_graph| {
130-
let (ref infcx, goal, var_values) =
131-
tcx.infer_ctxt().build_with_canonical(DUMMY_SP, &canonical_goal);
130+
let intercrate = match search_graph.solver_mode() {
131+
SolverMode::Normal => false,
132+
SolverMode::Coherence => true,
133+
};
134+
let (ref infcx, goal, var_values) = tcx
135+
.infer_ctxt()
136+
.intercrate(intercrate)
137+
.build_with_canonical(DUMMY_SP, &canonical_goal);
132138
let mut ecx = EvalCtxt {
133139
infcx,
134140
var_values,

compiler/rustc_trait_selection/src/traits/coherence.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,11 @@ pub fn overlapping_impls(
9595
return None;
9696
}
9797

98-
let infcx =
99-
tcx.infer_ctxt().with_opaque_type_inference(DefiningAnchor::Bubble).intercrate().build();
98+
let infcx = tcx
99+
.infer_ctxt()
100+
.with_opaque_type_inference(DefiningAnchor::Bubble)
101+
.intercrate(true)
102+
.build();
100103
let selcx = &mut SelectionContext::new(&infcx);
101104
let overlaps =
102105
overlap(selcx, skip_leak_check, impl1_def_id, impl2_def_id, overlap_mode).is_some();
@@ -107,8 +110,11 @@ pub fn overlapping_impls(
107110
// In the case where we detect an error, run the check again, but
108111
// this time tracking intercrate ambiguity causes for better
109112
// diagnostics. (These take time and can lead to false errors.)
110-
let infcx =
111-
tcx.infer_ctxt().with_opaque_type_inference(DefiningAnchor::Bubble).intercrate().build();
113+
let infcx = tcx
114+
.infer_ctxt()
115+
.with_opaque_type_inference(DefiningAnchor::Bubble)
116+
.intercrate(true)
117+
.build();
112118
let selcx = &mut SelectionContext::new(&infcx);
113119
selcx.enable_tracking_intercrate_ambiguity_causes();
114120
Some(overlap(selcx, skip_leak_check, impl1_def_id, impl2_def_id, overlap_mode).unwrap())

0 commit comments

Comments
 (0)