Skip to content

Commit 5c9f7dc

Browse files
committed
Auto merge of rust-lang#55649 - scalexm:chalk-bound-ty, r=nikomatsakis
Use bound types in `librustc_traits` r? @nikomatsakis see the tests which now move the higher-ranked binders to the left in implied bound rules!
2 parents 485397e + 8d0b969 commit 5c9f7dc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1179
-657
lines changed

src/Cargo.lock

+1
Original file line numberDiff line numberDiff line change
@@ -2419,6 +2419,7 @@ dependencies = [
24192419
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
24202420
"rustc 0.0.0",
24212421
"rustc_data_structures 0.0.0",
2422+
"rustc_target 0.0.0",
24222423
"smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
24232424
"syntax 0.0.0",
24242425
"syntax_pos 0.0.0",

src/librustc/infer/canonical/substitute.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,6 @@ where
8080
}
8181
};
8282

83-
tcx.replace_escaping_bound_vars(value, fld_r, fld_t)
83+
tcx.replace_escaping_bound_vars(value, fld_r, fld_t).0
8484
}
8585
}

src/librustc/infer/higher_ranked/mod.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ impl<'a, 'gcx, 'tcx> CombineFields<'a, 'gcx, 'tcx> {
5959
// with a fresh region variable. These region variables --
6060
// but no other pre-existing region variables -- can name
6161
// the placeholders.
62-
let (a_prime, _) =
63-
self.infcx.replace_late_bound_regions_with_fresh_var(
64-
span,
65-
HigherRankedType,
66-
a);
62+
let (a_prime, _) = self.infcx.replace_bound_vars_with_fresh_vars(
63+
span,
64+
HigherRankedType,
65+
a
66+
);
6767

6868
debug!("a_prime={:?}", a_prime);
6969
debug!("b_prime={:?}", b_prime);

src/librustc/infer/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1328,18 +1328,18 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
13281328
self.report_and_explain_type_error(trace, &err)
13291329
}
13301330

1331-
pub fn replace_late_bound_regions_with_fresh_var<T>(
1331+
pub fn replace_bound_vars_with_fresh_vars<T>(
13321332
&self,
13331333
span: Span,
13341334
lbrct: LateBoundRegionConversionTime,
1335-
value: &ty::Binder<T>,
1335+
value: &ty::Binder<T>
13361336
) -> (T, BTreeMap<ty::BoundRegion, ty::Region<'tcx>>)
13371337
where
1338-
T: TypeFoldable<'tcx>,
1338+
T: TypeFoldable<'tcx>
13391339
{
1340-
self.tcx.replace_late_bound_regions(value, |br| {
1341-
self.next_region_var(LateBoundRegion(span, br, lbrct))
1342-
})
1340+
let fld_r = |br| self.next_region_var(LateBoundRegion(span, br, lbrct));
1341+
let fld_t = |_| self.next_ty_var(TypeVariableOrigin::MiscVariable(span));
1342+
self.tcx.replace_bound_vars(value, fld_r, fld_t)
13431343
}
13441344

13451345
/// Given a higher-ranked projection predicate like:

src/librustc/traits/error_reporting.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,11 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
212212
// cause I have no idea for a good error message.
213213
if let ty::Predicate::Projection(ref data) = predicate {
214214
let mut selcx = SelectionContext::new(self);
215-
let (data, _) = self.replace_late_bound_regions_with_fresh_var(
215+
let (data, _) = self.replace_bound_vars_with_fresh_vars(
216216
obligation.cause.span,
217217
infer::LateBoundRegionConversionTime::HigherRankedType,
218-
data);
218+
data
219+
);
219220
let mut obligations = vec![];
220221
let normalized_ty = super::normalize_projection_type(
221222
&mut selcx,

0 commit comments

Comments
 (0)