Skip to content

Commit 3be81dd

Browse files
committed
Auto merge of #104282 - cjgillot:intern-span, r=compiler-errors
Hash spans when interning types Ignoring hash for spans creates an inconsistency between the `Hash` impl for `WithStableHash`, which takes them into account, and the `HashStable` impl which does not. cc `@compiler-errors` Fixes #104271 Fixes #104255 Fixes #104238
2 parents 229e875 + ba46b68 commit 3be81dd

19 files changed

+34
-108
lines changed

compiler/rustc_data_structures/src/intern.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,6 @@ where
110110
}
111111
}
112112

113-
/// A helper trait so that `Interned` things can cache stable hashes reproducibly.
114-
pub trait InternedHashingContext {
115-
fn with_def_path_and_no_spans(&mut self, f: impl FnOnce(&mut Self));
116-
}
117-
118113
/// A helper type that you can wrap round your own type in order to automatically
119114
/// cache the stable hash on creation and not recompute it whenever the stable hash
120115
/// of the type is computed.
@@ -161,11 +156,15 @@ impl<T> Deref for WithStableHash<T> {
161156
impl<T: Hash> Hash for WithStableHash<T> {
162157
#[inline]
163158
fn hash<H: Hasher>(&self, s: &mut H) {
164-
self.internee.hash(s)
159+
if self.stable_hash != Fingerprint::ZERO {
160+
self.stable_hash.hash(s)
161+
} else {
162+
self.internee.hash(s)
163+
}
165164
}
166165
}
167166

168-
impl<T: HashStable<CTX>, CTX: InternedHashingContext> HashStable<CTX> for WithStableHash<T> {
167+
impl<T: HashStable<CTX>, CTX> HashStable<CTX> for WithStableHash<T> {
169168
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
170169
if self.stable_hash == Fingerprint::ZERO || cfg!(debug_assertions) {
171170
// No cached hash available. This can only mean that incremental is disabled.
@@ -176,7 +175,7 @@ impl<T: HashStable<CTX>, CTX: InternedHashingContext> HashStable<CTX> for WithSt
176175
// otherwise the hashes will differ between cached and non-cached mode.
177176
let stable_hash: Fingerprint = {
178177
let mut hasher = StableHasher::new();
179-
hcx.with_def_path_and_no_spans(|hcx| self.internee.hash_stable(hcx, &mut hasher));
178+
self.internee.hash_stable(hcx, &mut hasher);
180179
hasher.finish()
181180
};
182181
if cfg!(debug_assertions) && self.stable_hash != Fingerprint::ZERO {

compiler/rustc_middle/src/ty/context.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,8 @@ impl<'tcx> CtxtInterners<'tcx> {
198198
Fingerprint::ZERO
199199
} else {
200200
let mut hasher = StableHasher::new();
201-
let mut hcx = StableHashingContext::ignore_spans(
202-
sess,
203-
definitions,
204-
cstore,
205-
source_span,
206-
);
201+
let mut hcx =
202+
StableHashingContext::new(sess, definitions, cstore, source_span);
207203
kind.hash_stable(&mut hcx, &mut hasher);
208204
hasher.finish()
209205
};

compiler/rustc_middle/src/ty/print/pretty.rs

+5-39
Original file line numberDiff line numberDiff line change
@@ -2225,46 +2225,12 @@ impl<'tcx> FmtPrinter<'_, 'tcx> {
22252225
// this is not *quite* right and changes the ordering of some output
22262226
// anyways.
22272227
let (new_value, map) = if self.should_print_verbose() {
2228-
let regions: Vec<_> = value
2229-
.bound_vars()
2230-
.into_iter()
2231-
.map(|var| {
2232-
let ty::BoundVariableKind::Region(var) = var else {
2233-
// This doesn't really matter because it doesn't get used,
2234-
// it's just an empty value
2235-
return ty::BrAnon(0, None);
2236-
};
2237-
match var {
2238-
ty::BrAnon(..) | ty::BrEnv => {
2239-
start_or_continue(&mut self, "for<", ", ");
2240-
let name = next_name(&self);
2241-
debug!(?name);
2242-
do_continue(&mut self, name);
2243-
ty::BrNamed(CRATE_DEF_ID.to_def_id(), name)
2244-
}
2245-
ty::BrNamed(def_id, kw::UnderscoreLifetime) => {
2246-
start_or_continue(&mut self, "for<", ", ");
2247-
let name = next_name(&self);
2248-
do_continue(&mut self, name);
2249-
ty::BrNamed(def_id, name)
2250-
}
2251-
ty::BrNamed(def_id, name) => {
2252-
start_or_continue(&mut self, "for<", ", ");
2253-
do_continue(&mut self, name);
2254-
ty::BrNamed(def_id, name)
2255-
}
2256-
}
2257-
})
2258-
.collect();
2228+
for var in value.bound_vars().iter() {
2229+
start_or_continue(&mut self, "for<", ", ");
2230+
write!(self, "{:?}", var)?;
2231+
}
22592232
start_or_continue(&mut self, "", "> ");
2260-
2261-
self.tcx.replace_late_bound_regions(value.clone(), |br| {
2262-
let kind = regions[br.var.as_usize()];
2263-
self.tcx.mk_region(ty::ReLateBound(
2264-
ty::INNERMOST,
2265-
ty::BoundRegion { var: br.var, kind },
2266-
))
2267-
})
2233+
(value.clone().skip_binder(), BTreeMap::default())
22682234
} else {
22692235
let tcx = self.tcx;
22702236

compiler/rustc_query_system/src/ich/hcx.rs

+2-37
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,13 @@ pub(super) enum BodyResolver<'tcx> {
4949

5050
impl<'a> StableHashingContext<'a> {
5151
#[inline]
52-
fn new_with_or_without_spans(
52+
pub fn new(
5353
sess: &'a Session,
5454
definitions: &'a Definitions,
5555
cstore: &'a dyn CrateStore,
5656
source_span: &'a IndexVec<LocalDefId, Span>,
57-
always_ignore_spans: bool,
5857
) -> Self {
59-
let hash_spans_initial =
60-
!always_ignore_spans && !sess.opts.unstable_opts.incremental_ignore_spans;
58+
let hash_spans_initial = !sess.opts.unstable_opts.incremental_ignore_spans;
6159

6260
StableHashingContext {
6361
body_resolver: BodyResolver::Forbidden,
@@ -71,33 +69,6 @@ impl<'a> StableHashingContext<'a> {
7169
}
7270
}
7371

74-
#[inline]
75-
pub fn new(
76-
sess: &'a Session,
77-
definitions: &'a Definitions,
78-
cstore: &'a dyn CrateStore,
79-
source_span: &'a IndexVec<LocalDefId, Span>,
80-
) -> Self {
81-
Self::new_with_or_without_spans(
82-
sess,
83-
definitions,
84-
cstore,
85-
source_span,
86-
/*always_ignore_spans=*/ false,
87-
)
88-
}
89-
90-
#[inline]
91-
pub fn ignore_spans(
92-
sess: &'a Session,
93-
definitions: &'a Definitions,
94-
cstore: &'a dyn CrateStore,
95-
source_span: &'a IndexVec<LocalDefId, Span>,
96-
) -> Self {
97-
let always_ignore_spans = true;
98-
Self::new_with_or_without_spans(sess, definitions, cstore, source_span, always_ignore_spans)
99-
}
100-
10172
#[inline]
10273
pub fn without_hir_bodies(&mut self, f: impl FnOnce(&mut StableHashingContext<'_>)) {
10374
f(&mut StableHashingContext { body_resolver: BodyResolver::Ignore, ..self.clone() });
@@ -202,10 +173,4 @@ impl<'a> rustc_span::HashStableContext for StableHashingContext<'a> {
202173
}
203174
}
204175

205-
impl<'a> rustc_data_structures::intern::InternedHashingContext for StableHashingContext<'a> {
206-
fn with_def_path_and_no_spans(&mut self, f: impl FnOnce(&mut Self)) {
207-
self.while_hashing_spans(false, f);
208-
}
209-
}
210-
211176
impl<'a> rustc_session::HashStableContext for StableHashingContext<'a> {}

src/test/ui/nll/closure-requirements/escape-argument-callee.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | let mut closure = expect_sig(|p, y| *p = y);
66
|
77
= note: defining type: test::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b, 'c> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) mut &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) i32, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrNamed('c) }) i32)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) mut &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) i32, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) i32)),
1010
(),
1111
]
1212

src/test/ui/nll/closure-requirements/escape-argument.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | let mut closure = expect_sig(|p, y| *p = y);
66
|
77
= note: defining type: test::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) mut &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) i32, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) i32)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) mut &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) i32, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) i32)),
1010
(),
1111
]
1212

src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | |_outlives1, _outlives2, _outlives3, x, y| {
66
|
77
= note: defining type: supply::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>, std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) &'_#3r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#3r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>)),
1010
(),
1111
]
1212
= note: late-bound region is '_#4r

src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y
66
|
77
= note: defining type: supply::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b, 'c, 'd, 'e, 'f> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrNamed('c) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrNamed('d) }) &'_#2r u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrNamed('e) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 5, kind: BrNamed('f) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrNamed('d) }) u32>)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None)), Region(BrAnon(5, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) &'_#2r u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 5, kind: BrAnon(5, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>)),
1010
(),
1111
]
1212
= note: late-bound region is '_#3r

src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-comparing-against-free.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | foo(cell, |cell_a, cell_x| {
66
|
77
= note: defining type: case1::{closure#0} with closure substs [
88
i32,
9-
for<'a> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>)),
9+
for<Region(BrAnon(0, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>)),
1010
(),
1111
]
1212

@@ -36,7 +36,7 @@ LL | foo(cell, |cell_a, cell_x| {
3636
|
3737
= note: defining type: case2::{closure#0} with closure substs [
3838
i32,
39-
for<'a> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>)),
39+
for<Region(BrAnon(0, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>)),
4040
(),
4141
]
4242
= note: number of external vids: 2

src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-no-bound.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
66
|
77
= note: defining type: supply::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b, 'c, 'd, 'e> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrNamed('c) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrNamed('d) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrNamed('e) }) u32>)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) u32>)),
1010
(),
1111
]
1212
= note: late-bound region is '_#2r

src/test/ui/nll/closure-requirements/propagate-approximated-shorter-to-static-wrong-bound.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y
66
|
77
= note: defining type: supply::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b, 'c, 'd, 'e, 'f> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrNamed('c) }) std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrNamed('d) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrNamed('e) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 5, kind: BrNamed('f) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrNamed('d) }) u32>)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None)), Region(BrAnon(2, None)), Region(BrAnon(3, None)), Region(BrAnon(4, None)), Region(BrAnon(5, None))> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 2, kind: BrAnon(2, None) }) std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 4, kind: BrAnon(4, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>, &ReLateBound(DebruijnIndex(0), BoundRegion { var: 5, kind: BrAnon(5, None) }) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 3, kind: BrAnon(3, None) }) u32>)),
1010
(),
1111
]
1212
= note: late-bound region is '_#3r

src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
66
|
77
= note: defining type: test::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>)),
1010
(),
1111
]
1212
= note: late-bound region is '_#3r

src/test/ui/nll/closure-requirements/propagate-despite-same-free-region.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | |_outlives1, _outlives2, x, y| {
66
|
77
= note: defining type: supply::{closure#0} with closure substs [
88
i16,
9-
for<'a, 'b> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrNamed('a) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrNamed('b) }) u32>)),
9+
for<Region(BrAnon(0, None)), Region(BrAnon(1, None))> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 0, kind: BrAnon(0, None) }) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BoundRegion { var: 1, kind: BrAnon(1, None) }) u32>)),
1010
(),
1111
]
1212
= note: late-bound region is '_#3r

0 commit comments

Comments
 (0)