Skip to content

Commit f764286

Browse files
committed
Avoid allocating region map when replacing bound vars
1 parent 4e1927d commit f764286

File tree

1 file changed

+8
-4
lines changed
  • compiler/rustc_infer/src/infer/higher_ranked

1 file changed

+8
-4
lines changed

compiler/rustc_infer/src/infer/higher_ranked/mod.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,10 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
7676
// (i.e., if there are no placeholders).
7777
let next_universe = self.universe().next_universe();
7878

79+
let mut region_replaced = false;
80+
7981
let fld_r = |br: ty::BoundRegion| {
82+
region_replaced = true;
8083
self.tcx.mk_region(ty::RePlaceholder(ty::PlaceholderRegion {
8184
universe: next_universe,
8285
name: br.kind,
@@ -100,11 +103,12 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
100103
})
101104
};
102105

103-
let (result, map) = self.tcx.replace_bound_vars(binder, fld_r, fld_t, fld_c);
106+
let result =
107+
self.tcx.replace_escaping_bound_vars(binder.skip_binder(), fld_r, fld_t, fld_c);
104108

105109
// If there were higher-ranked regions to replace, then actually create
106110
// the next universe (this avoids needlessly creating universes).
107-
if !map.is_empty() {
111+
if region_replaced {
108112
let n_u = self.create_next_universe();
109113
assert_eq!(n_u, next_universe);
110114
}
@@ -113,8 +117,8 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
113117
"replace_bound_vars_with_placeholders(\
114118
next_universe={:?}, \
115119
result={:?}, \
116-
map={:?})",
117-
next_universe, result, map,
120+
region_replaced={:?})",
121+
next_universe, result, region_replaced,
118122
);
119123

120124
result

0 commit comments

Comments
 (0)