Rollup merge of #69968 - eddyb:tupled-closure-captures, r=nikomatsakis

rustc: keep upvars tupled in {Closure,Generator}Substs.

Previously, each closure/generator capture's (aka "upvar") type was tracked as one "synthetic" type parameter in the closure/generator substs, and figuring out where the parent `fn`'s generics end and the synthetics start involved slicing at `tcx.generics_of(def_id).parent_count`.

Needing to query `generics_of` limited @davidtwco (who wants to compute some `TypeFlags` differently for parent generics vs upvars, and `TyCtxt` is not available there), which is how I got started on this, but it's also possible that the `generics_of` queries are slowing down `{Closure,Generator}Substs` methods.

To give an example, for a `foo::<T, U>::{closure#0}` with captures `x: X` and `y: Y`, substs are:
* before this PR: `[T, U, /*kind*/, /*signature*/, X, Y]`
* after this PR: `[T, U, /*kind*/, /*signature*/, (X, Y)]`

You can see that, with this PR, no matter how many captures, the last 3 entries in the substs (or 5 for a generator) are always the "synthetic" ones, with the last one being the tuple of capture types.

r? @nikomatsakis cc @Zoxc
This commit is contained in:
Mazdak Farrokhzad 2020-03-23 10:29:11 +01:00 committed by GitHub
commit bee074f032
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
65 changed files with 356 additions and 367 deletions

View file

@ -8,7 +8,7 @@ LL | | a.matches(f)
LL | | }
| |_____^
|
= note: consider adding a `#![type_length_limit="26214380"]` attribute to your crate
= note: consider adding a `#![type_length_limit="30408681"]` attribute to your crate
error: aborting due to previous error

View file

@ -7,6 +7,7 @@ LL | let mut closure = expect_sig(|p, y| *p = y);
= note: defining type: test::{{closure}}#0 with closure substs [
i16,
for<'r, 's, 't0> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) mut &ReLateBound(DebruijnIndex(0), BrNamed('s)) i32, &ReLateBound(DebruijnIndex(0), BrNamed('t0)) i32)),
(),
]
error: lifetime may not live long enough

View file

@ -7,6 +7,7 @@ LL | let mut closure = expect_sig(|p, y| *p = y);
= note: defining type: test::{{closure}}#0 with closure substs [
i16,
for<'r, 's> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) mut &ReLateBound(DebruijnIndex(0), BrNamed('s)) i32, &ReLateBound(DebruijnIndex(0), BrNamed('s)) i32)),
(),
]
note: no external requirements

View file

@ -7,8 +7,7 @@ LL | let mut closure1 = || p = &y;
= note: defining type: test::{{closure}}#0::{{closure}}#0 with closure substs [
i16,
extern "rust-call" fn(()),
&'_#1r i32,
&'_#2r mut &'_#3r i32,
(&'_#1r i32, &'_#2r mut &'_#3r i32),
]
= note: number of external vids: 4
= note: where '_#1r: '_#3r
@ -26,8 +25,7 @@ LL | | };
= note: defining type: test::{{closure}}#0 with closure substs [
i16,
extern "rust-call" fn(()),
&'_#1r i32,
&'_#2r mut &'_#3r i32,
(&'_#1r i32, &'_#2r mut &'_#3r i32),
]
= note: number of external vids: 4
= note: where '_#1r: '_#3r

View file

@ -7,8 +7,7 @@ LL | let mut closure = || p = &y;
= note: defining type: test::{{closure}}#0 with closure substs [
i16,
extern "rust-call" fn(()),
&'_#1r i32,
&'_#2r mut &'_#3r i32,
(&'_#1r i32, &'_#2r mut &'_#3r i32),
]
= note: number of external vids: 4
= note: where '_#1r: '_#3r

View file

@ -11,6 +11,7 @@ LL | | },
= note: defining type: supply::{{closure}}#0 with closure substs [
i16,
for<'r, 's> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>, std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) &'_#3r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>)),
(),
]
= note: late-bound region is '_#4r
= note: late-bound region is '_#5r

View file

@ -12,6 +12,7 @@ LL | | });
= note: defining type: supply::{{closure}}#0 with closure substs [
i16,
for<'r, 's, 't0, 't1, 't2, 't3> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t0)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('t1)) &'_#2r u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t2)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t3)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('t1)) u32>)),
(),
]
= note: late-bound region is '_#3r
= note: late-bound region is '_#4r

View file

@ -11,6 +11,7 @@ LL | | })
= note: defining type: case1::{{closure}}#0 with closure substs [
i32,
for<'r> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>)),
(),
]
error[E0521]: borrowed data escapes outside of closure
@ -49,6 +50,7 @@ LL | | })
= note: defining type: case2::{{closure}}#0 with closure substs [
i32,
for<'r> extern "rust-call" fn((std::cell::Cell<&'_#1r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>)),
(),
]
= note: number of external vids: 2
= note: where '_#1r: '_#0r

View file

@ -13,6 +13,7 @@ LL | | });
= note: defining type: supply::{{closure}}#0 with closure substs [
i16,
for<'r, 's, 't0, 't1, 't2> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t0)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t1)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('t2)) u32>)),
(),
]
= note: late-bound region is '_#2r
= note: late-bound region is '_#3r

View file

@ -13,6 +13,7 @@ LL | | });
= note: defining type: supply::{{closure}}#0 with closure substs [
i16,
for<'r, 's, 't0, 't1, 't2, 't3> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t0)) std::cell::Cell<&'_#2r &ReLateBound(DebruijnIndex(0), BrNamed('t1)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t2)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t3)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('t1)) u32>)),
(),
]
= note: late-bound region is '_#3r
= note: late-bound region is '_#4r

View file

@ -12,6 +12,7 @@ LL | | });
= note: defining type: test::{{closure}}#0 with closure substs [
i16,
for<'r, 's> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>)),
(),
]
= note: late-bound region is '_#3r
= note: late-bound region is '_#4r

View file

@ -11,6 +11,7 @@ LL | | },
= note: defining type: supply::{{closure}}#0 with closure substs [
i16,
for<'r, 's> extern "rust-call" fn((std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) &'_#2r u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('r)) u32>, std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>)),
(),
]
= note: late-bound region is '_#3r
= note: number of external vids: 4

View file

@ -12,6 +12,7 @@ LL | | });
= note: defining type: supply::{{closure}}#0 with closure substs [
i16,
for<'r, 's, 't0, 't1, 't2> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) &'_#1r u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t0)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('t1)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t2)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>)),
(),
]
= note: late-bound region is '_#2r
= note: late-bound region is '_#3r

View file

@ -12,6 +12,7 @@ LL | | });
= note: defining type: supply::{{closure}}#0 with closure substs [
i16,
for<'r, 's, 't0, 't1, 't2, 't3> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) &'_#1r u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t0)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('t1)) &'_#2r u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t2)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('s)) u32>, &ReLateBound(DebruijnIndex(0), BrNamed('t3)) std::cell::Cell<&ReLateBound(DebruijnIndex(0), BrNamed('t1)) u32>)),
(),
]
= note: late-bound region is '_#3r
= note: late-bound region is '_#4r

View file

@ -14,6 +14,7 @@ LL | | });
= note: defining type: supply::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((T,)),
(),
]
= note: number of external vids: 2
= note: where T: '_#1r

View file

@ -7,6 +7,7 @@ LL | expect_sig(|a, b| b); // ought to return `a`
= note: defining type: test::{{closure}}#0 with closure substs [
i16,
for<'r, 's> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed('r)) i32, &ReLateBound(DebruijnIndex(0), BrNamed('s)) i32)) -> &ReLateBound(DebruijnIndex(0), BrNamed('r)) i32,
(),
]
error: lifetime may not live long enough

View file

@ -7,6 +7,7 @@ LL | with_signature(x, |mut y| Box::new(y.next()))
= note: defining type: no_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#2r)>,
(),
]
= note: number of external vids: 3
= note: where <T as std::iter::Iterator>::Item: '_#2r
@ -42,6 +43,7 @@ LL | with_signature(x, |mut y| Box::new(y.next()))
= note: defining type: correct_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#2r)>,
(),
]
= note: number of external vids: 3
= note: where <T as std::iter::Iterator>::Item: '_#2r
@ -68,6 +70,7 @@ LL | with_signature(x, |mut y| Box::new(y.next()))
= note: defining type: wrong_region::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#3r)>,
(),
]
= note: number of external vids: 4
= note: where <T as std::iter::Iterator>::Item: '_#3r
@ -103,6 +106,7 @@ LL | with_signature(x, |mut y| Box::new(y.next()))
= note: defining type: outlives_region::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn Anything + '_#3r)>,
(),
]
= note: number of external vids: 4
= note: where <T as std::iter::Iterator>::Item: '_#3r

View file

@ -7,6 +7,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_late::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: late-bound region is '_#3r
= note: number of external vids: 4
@ -57,6 +58,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_early::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where T: '_#3r
@ -106,6 +108,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: projection_outlives::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where <T as Anything<ReClosureBound('_#2r)>>::AssocType: '_#3r
@ -133,6 +136,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: elements_outlive::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where T: '_#3r

View file

@ -7,6 +7,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_late::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: late-bound region is '_#3r
= note: number of external vids: 4
@ -48,6 +49,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_early::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where '_#2r: '_#3r
@ -88,6 +90,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: projection_outlives::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where <T as Anything<ReClosureBound('_#2r)>>::AssocType: '_#3r
@ -115,6 +118,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: elements_outlive::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where '_#2r: '_#3r
@ -142,6 +146,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: one_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: number of external vids: 3
= note: where '_#1r: '_#2r

View file

@ -7,6 +7,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_late::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: late-bound region is '_#3r
@ -32,6 +33,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_early::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
note: no external requirements
@ -57,6 +59,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: projection_outlives::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
note: no external requirements
@ -82,6 +85,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: elements_outlive::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
note: no external requirements
@ -107,6 +111,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: one_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
note: no external requirements

View file

@ -7,6 +7,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_late::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: late-bound region is '_#4r
= note: number of external vids: 5
@ -43,6 +44,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: no_relationships_early::<'_#1r, '_#2r, '_#3r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
(),
]
= note: number of external vids: 5
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#3r)>>::AssocType: '_#4r
@ -78,6 +80,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: projection_outlives::<'_#1r, '_#2r, '_#3r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
(),
]
= note: number of external vids: 5
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#3r)>>::AssocType: '_#4r
@ -105,6 +108,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: elements_outlive1::<'_#1r, '_#2r, '_#3r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
(),
]
= note: number of external vids: 5
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#3r)>>::AssocType: '_#4r
@ -132,6 +136,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: elements_outlive2::<'_#1r, '_#2r, '_#3r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#4r ()>, T)),
(),
]
= note: number of external vids: 5
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#3r)>>::AssocType: '_#4r
@ -159,6 +164,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: two_regions::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: late-bound region is '_#3r
= note: number of external vids: 4
@ -200,6 +206,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: two_regions_outlive::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#2r)>>::AssocType: '_#3r
@ -227,6 +234,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: defining type: one_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: number of external vids: 3
= note: where <T as Anything<ReClosureBound('_#1r), ReClosureBound('_#1r)>>::AssocType: '_#2r

View file

@ -7,6 +7,7 @@ LL | twice(cell, value, |a, b| invoke(a, b));
= note: defining type: generic::<T>::{{closure}}#0 with closure substs [
i16,
for<'r, 's> extern "rust-call" fn((std::option::Option<std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('r)) ()>>, &ReLateBound(DebruijnIndex(0), BrNamed('s)) T)),
(),
]
= note: number of external vids: 2
= note: where T: '_#1r
@ -31,6 +32,7 @@ LL | twice(cell, value, |a, b| invoke(a, b));
= note: defining type: generic_fail::<T>::{{closure}}#0 with closure substs [
i16,
for<'r, 's> extern "rust-call" fn((std::option::Option<std::cell::Cell<&'_#1r &ReLateBound(DebruijnIndex(0), BrNamed('r)) ()>>, &ReLateBound(DebruijnIndex(0), BrNamed('s)) T)),
(),
]
= note: late-bound region is '_#2r
= note: number of external vids: 3

View file

@ -7,6 +7,7 @@ LL | with_signature(x, |y| y)
= note: defining type: no_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::boxed::Box<T>,)) -> std::boxed::Box<(dyn std::fmt::Debug + '_#2r)>,
(),
]
= note: number of external vids: 3
= note: where T: '_#2r

View file

@ -14,6 +14,7 @@ LL | | })
= note: defining type: no_region::<T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#1r ()>, T)),
(),
]
= note: late-bound region is '_#2r
= note: number of external vids: 3
@ -64,6 +65,7 @@ LL | | })
= note: defining type: correct_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: number of external vids: 3
= note: where T: '_#2r
@ -96,6 +98,7 @@ LL | | })
= note: defining type: wrong_region::<'_#1r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#2r ()>, T)),
(),
]
= note: late-bound region is '_#3r
= note: number of external vids: 4
@ -141,6 +144,7 @@ LL | | })
= note: defining type: outlives_region::<'_#1r, '_#2r, T>::{{closure}}#0 with closure substs [
i32,
extern "rust-call" fn((std::cell::Cell<&'_#3r ()>, T)),
(),
]
= note: number of external vids: 4
= note: where T: '_#3r