Skip to content

Commit 48132ca

Browse files
committed
Auto merge of rust-lang#94427 - cjgillot:inline-fresh-expn, r=oli-obk
Only create a single expansion for each inline integration. The inlining integrator used to create one expansion for each span from the callee body. This PR reverses the logic to create a single expansion for the whole call, which is more consistent with how macro expansions work for macros. This should remove the large memory regression in rust-lang#91743.
2 parents 427cf81 + e77e4fc commit 48132ca

File tree

51 files changed

+502
-497
lines changed

Some content is hidden

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

51 files changed

+502
-497
lines changed

Diff for: compiler/rustc_errors/src/emitter.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -408,8 +408,8 @@ pub trait Emitter {
408408
"this derive macro expansion".into()
409409
}
410410
ExpnKind::Macro(MacroKind::Bang, _) => "this macro invocation".into(),
411-
ExpnKind::Inlined => "the inlined copy of this code".into(),
412-
ExpnKind::Root => "in the crate root".into(),
411+
ExpnKind::Inlined => "this inlined function call".into(),
412+
ExpnKind::Root => "the crate root".into(),
413413
ExpnKind::AstPass(kind) => kind.descr().into(),
414414
ExpnKind::Desugaring(kind) => {
415415
format!("this {} desugaring", kind.descr()).into()

Diff for: compiler/rustc_mir_transform/src/inline.rs

+14-10
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use rustc_middle::mir::*;
1010
use rustc_middle::traits::ObligationCause;
1111
use rustc_middle::ty::subst::Subst;
1212
use rustc_middle::ty::{self, ConstKind, Instance, InstanceDef, ParamEnv, Ty, TyCtxt};
13-
use rustc_span::{hygiene::ExpnKind, ExpnData, Span};
13+
use rustc_span::{hygiene::ExpnKind, ExpnData, LocalExpnId, Span};
1414
use rustc_target::spec::abi::Abi;
1515

1616
use super::simplify::{remove_dead_blocks, CfgSimplifier};
@@ -543,6 +543,16 @@ impl<'tcx> Inliner<'tcx> {
543543
// Copy the arguments if needed.
544544
let args: Vec<_> = self.make_call_args(args, &callsite, caller_body, &callee_body);
545545

546+
let mut expn_data = ExpnData::default(
547+
ExpnKind::Inlined,
548+
callsite.source_info.span,
549+
self.tcx.sess.edition(),
550+
None,
551+
None,
552+
);
553+
expn_data.def_site = callee_body.span;
554+
let expn_data =
555+
LocalExpnId::fresh(expn_data, self.tcx.create_stable_hashing_context());
546556
let mut integrator = Integrator {
547557
args: &args,
548558
new_locals: Local::new(caller_body.local_decls.len())..,
@@ -553,8 +563,7 @@ impl<'tcx> Inliner<'tcx> {
553563
cleanup_block: cleanup,
554564
in_cleanup_block: false,
555565
tcx: self.tcx,
556-
callsite_span: callsite.source_info.span,
557-
body_span: callee_body.span,
566+
expn_data,
558567
always_live_locals: BitSet::new_filled(callee_body.local_decls.len()),
559568
};
560569

@@ -787,8 +796,7 @@ struct Integrator<'a, 'tcx> {
787796
cleanup_block: Option<BasicBlock>,
788797
in_cleanup_block: bool,
789798
tcx: TyCtxt<'tcx>,
790-
callsite_span: Span,
791-
body_span: Span,
799+
expn_data: LocalExpnId,
792800
always_live_locals: BitSet<Local>,
793801
}
794802

@@ -835,12 +843,8 @@ impl<'tcx> MutVisitor<'tcx> for Integrator<'_, 'tcx> {
835843
}
836844

837845
fn visit_span(&mut self, span: &mut Span) {
838-
let mut expn_data =
839-
ExpnData::default(ExpnKind::Inlined, *span, self.tcx.sess.edition(), None, None);
840-
expn_data.def_site = self.body_span;
841846
// Make sure that all spans track the fact that they were inlined.
842-
*span =
843-
self.callsite_span.fresh_expansion(expn_data, self.tcx.create_stable_hashing_context());
847+
*span = span.fresh_expansion(self.expn_data);
844848
}
845849

846850
fn visit_place(&mut self, place: &mut Place<'tcx>, context: PlaceContext, location: Location) {

Diff for: compiler/rustc_span/src/hygiene.rs

+8-13
Original file line numberDiff line numberDiff line change
@@ -874,19 +874,13 @@ impl Span {
874874
/// other compiler-generated code to set per-span properties like allowed unstable features.
875875
/// The returned span belongs to the created expansion and has the new properties,
876876
/// but its location is inherited from the current span.
877-
pub fn fresh_expansion(self, expn_data: ExpnData, ctx: impl HashStableContext) -> Span {
878-
self.fresh_expansion_with_transparency(expn_data, Transparency::Transparent, ctx)
879-
}
880-
881-
pub fn fresh_expansion_with_transparency(
882-
self,
883-
expn_data: ExpnData,
884-
transparency: Transparency,
885-
ctx: impl HashStableContext,
886-
) -> Span {
887-
let expn_id = LocalExpnId::fresh(expn_data, ctx).to_expn_id();
877+
pub fn fresh_expansion(self, expn_id: LocalExpnId) -> Span {
888878
HygieneData::with(|data| {
889-
self.with_ctxt(data.apply_mark(SyntaxContext::root(), expn_id, transparency))
879+
self.with_ctxt(data.apply_mark(
880+
SyntaxContext::root(),
881+
expn_id.to_expn_id(),
882+
Transparency::Transparent,
883+
))
890884
})
891885
}
892886

@@ -903,7 +897,8 @@ impl Span {
903897
allow_internal_unstable,
904898
..ExpnData::default(ExpnKind::Desugaring(reason), self, edition, None, None)
905899
};
906-
self.fresh_expansion(expn_data, ctx)
900+
let expn_id = LocalExpnId::fresh(expn_data, ctx);
901+
self.fresh_expansion(expn_id)
907902
}
908903
}
909904

Diff for: src/librustdoc/passes/check_code_block_syntax.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use rustc_errors::{emitter::Emitter, Applicability, Diagnostic, Handler};
44
use rustc_middle::lint::LintDiagnosticBuilder;
55
use rustc_parse::parse_stream_from_source_str;
66
use rustc_session::parse::ParseSess;
7+
use rustc_span::hygiene::{AstPass, ExpnData, ExpnKind, LocalExpnId};
78
use rustc_span::source_map::{FilePathMapping, SourceMap};
8-
use rustc_span::{hygiene::AstPass, ExpnData, ExpnKind, FileName, InnerSpan, DUMMY_SP};
9+
use rustc_span::{FileName, InnerSpan, DUMMY_SP};
910

1011
use crate::clean;
1112
use crate::core::DocContext;
@@ -46,7 +47,8 @@ impl<'a, 'tcx> SyntaxChecker<'a, 'tcx> {
4647
None,
4748
None,
4849
);
49-
let span = DUMMY_SP.fresh_expansion(expn_data, self.cx.tcx.create_stable_hashing_context());
50+
let expn_id = LocalExpnId::fresh(expn_data, self.cx.tcx.create_stable_hashing_context());
51+
let span = DUMMY_SP.fresh_expansion(expn_id);
5052

5153
let is_empty = rustc_driver::catch_fatal_errors(|| {
5254
parse_stream_from_source_str(

Diff for: src/test/mir-opt/deduplicate_blocks.is_line_doc_comment_2.DeduplicateBlocks.diff

+8-8
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
let mut _6: usize; // in scope 0 at $DIR/deduplicate_blocks.rs:4:9: 4:37
1212
let mut _7: bool; // in scope 0 at $DIR/deduplicate_blocks.rs:4:9: 4:37
1313
scope 1 (inlined core::str::<impl str>::as_bytes) { // at $DIR/deduplicate_blocks.rs:3:11: 3:23
14-
debug self => _3; // in scope 1 at $DIR/deduplicate_blocks.rs:3:11: 3:23
15-
let mut _8: &str; // in scope 1 at $DIR/deduplicate_blocks.rs:3:11: 3:23
14+
debug self => _3; // in scope 1 at $SRC_DIR/core/src/str/mod.rs:LL:COL
15+
let mut _8: &str; // in scope 1 at $SRC_DIR/core/src/str/mod.rs:LL:COL
1616
scope 2 {
1717
}
1818
}
@@ -21,12 +21,12 @@
2121
StorageLive(_2); // scope 0 at $DIR/deduplicate_blocks.rs:3:11: 3:23
2222
StorageLive(_3); // scope 0 at $DIR/deduplicate_blocks.rs:3:11: 3:23
2323
_3 = _1; // scope 0 at $DIR/deduplicate_blocks.rs:3:11: 3:23
24-
StorageLive(_8); // scope 2 at $DIR/deduplicate_blocks.rs:3:11: 3:23
25-
_8 = _3; // scope 2 at $DIR/deduplicate_blocks.rs:3:11: 3:23
26-
- _2 = transmute::<&str, &[u8]>(move _8) -> bb14; // scope 2 at $DIR/deduplicate_blocks.rs:3:11: 3:23
27-
+ _2 = transmute::<&str, &[u8]>(move _8) -> bb12; // scope 2 at $DIR/deduplicate_blocks.rs:3:11: 3:23
24+
StorageLive(_8); // scope 2 at $SRC_DIR/core/src/str/mod.rs:LL:COL
25+
_8 = _3; // scope 2 at $SRC_DIR/core/src/str/mod.rs:LL:COL
26+
- _2 = transmute::<&str, &[u8]>(move _8) -> bb14; // scope 2 at $SRC_DIR/core/src/str/mod.rs:LL:COL
27+
+ _2 = transmute::<&str, &[u8]>(move _8) -> bb12; // scope 2 at $SRC_DIR/core/src/str/mod.rs:LL:COL
2828
// mir::Constant
29-
// + span: $DIR/deduplicate_blocks.rs:3:11: 3:23
29+
// + span: $SRC_DIR/core/src/str/mod.rs:LL:COL
3030
// + literal: Const { ty: unsafe extern "rust-intrinsic" fn(&str) -> &[u8] {transmute::<&str, &[u8]>}, val: Value(Scalar(<ZST>)) }
3131
}
3232

@@ -97,7 +97,7 @@
9797

9898
- bb14: {
9999
+ bb12: {
100-
StorageDead(_8); // scope 2 at $DIR/deduplicate_blocks.rs:3:11: 3:23
100+
StorageDead(_8); // scope 2 at $SRC_DIR/core/src/str/mod.rs:LL:COL
101101
StorageDead(_3); // scope 0 at $DIR/deduplicate_blocks.rs:3:22: 3:23
102102
_6 = Len((*_2)); // scope 0 at $DIR/deduplicate_blocks.rs:4:9: 4:37
103103
_7 = Ge(move _6, const 4_usize); // scope 0 at $DIR/deduplicate_blocks.rs:4:9: 4:37

Diff for: src/test/mir-opt/dest-prop/cycle.main.DestinationPropagation.diff

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
- debug z => _3; // in scope 3 at $DIR/cycle.rs:11:9: 11:10
2020
+ debug z => _4; // in scope 3 at $DIR/cycle.rs:11:9: 11:10
2121
scope 4 (inlined std::mem::drop::<i32>) { // at $DIR/cycle.rs:14:5: 14:12
22-
debug _x => _6; // in scope 4 at $DIR/cycle.rs:14:5: 14:12
22+
debug _x => _6; // in scope 4 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
2323
}
2424
}
2525
}

Diff for: src/test/mir-opt/dest-prop/union.main.DestinationPropagation.diff

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
scope 2 {
1313
}
1414
scope 3 (inlined std::mem::drop::<u32>) { // at $DIR/union.rs:15:5: 15:27
15-
debug _x => _4; // in scope 3 at $DIR/union.rs:15:5: 15:27
15+
debug _x => _4; // in scope 3 at $SRC_DIR/core/src/mem/mod.rs:LL:COL
1616
}
1717
}
1818

Diff for: src/test/mir-opt/inline/inline_any_operand.bar.Inline.after.mir

+11-11
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ fn bar() -> bool {
99
scope 1 {
1010
debug f => _1; // in scope 1 at $DIR/inline-any-operand.rs:11:9: 11:10
1111
scope 2 (inlined foo) { // at $DIR/inline-any-operand.rs:12:5: 12:13
12-
debug x => _3; // in scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
13-
debug y => _4; // in scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
14-
let mut _5: i32; // in scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
15-
let mut _6: i32; // in scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
12+
debug x => _3; // in scope 2 at $DIR/inline-any-operand.rs:16:8: 16:9
13+
debug y => _4; // in scope 2 at $DIR/inline-any-operand.rs:16:16: 16:17
14+
let mut _5: i32; // in scope 2 at $DIR/inline-any-operand.rs:17:5: 17:6
15+
let mut _6: i32; // in scope 2 at $DIR/inline-any-operand.rs:17:10: 17:11
1616
}
1717
}
1818

@@ -28,13 +28,13 @@ fn bar() -> bool {
2828
_3 = const 1_i32; // scope 1 at $DIR/inline-any-operand.rs:12:5: 12:13
2929
StorageLive(_4); // scope 1 at $DIR/inline-any-operand.rs:12:5: 12:13
3030
_4 = const -1_i32; // scope 1 at $DIR/inline-any-operand.rs:12:5: 12:13
31-
StorageLive(_5); // scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
32-
_5 = _3; // scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
33-
StorageLive(_6); // scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
34-
_6 = _4; // scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
35-
_0 = Eq(move _5, move _6); // scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
36-
StorageDead(_6); // scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
37-
StorageDead(_5); // scope 2 at $DIR/inline-any-operand.rs:12:5: 12:13
31+
StorageLive(_5); // scope 2 at $DIR/inline-any-operand.rs:17:5: 17:6
32+
_5 = _3; // scope 2 at $DIR/inline-any-operand.rs:17:5: 17:6
33+
StorageLive(_6); // scope 2 at $DIR/inline-any-operand.rs:17:10: 17:11
34+
_6 = _4; // scope 2 at $DIR/inline-any-operand.rs:17:10: 17:11
35+
_0 = Eq(move _5, move _6); // scope 2 at $DIR/inline-any-operand.rs:17:5: 17:11
36+
StorageDead(_6); // scope 2 at $DIR/inline-any-operand.rs:17:10: 17:11
37+
StorageDead(_5); // scope 2 at $DIR/inline-any-operand.rs:17:10: 17:11
3838
StorageDead(_4); // scope 1 at $DIR/inline-any-operand.rs:12:5: 12:13
3939
StorageDead(_3); // scope 1 at $DIR/inline-any-operand.rs:12:5: 12:13
4040
StorageDead(_2); // scope 1 at $DIR/inline-any-operand.rs:12:12: 12:13

Diff for: src/test/mir-opt/inline/inline_closure.foo.Inline.after.mir

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ fn foo(_1: T, _2: i32) -> i32 {
1414
scope 1 {
1515
debug x => _3; // in scope 1 at $DIR/inline-closure.rs:11:9: 11:10
1616
scope 2 (inlined foo::<T>::{closure#0}) { // at $DIR/inline-closure.rs:12:5: 12:12
17-
debug _t => _8; // in scope 2 at $DIR/inline-closure.rs:12:5: 12:12
18-
debug _q => _9; // in scope 2 at $DIR/inline-closure.rs:12:5: 12:12
17+
debug _t => _8; // in scope 2 at $DIR/inline-closure.rs:11:14: 11:16
18+
debug _q => _9; // in scope 2 at $DIR/inline-closure.rs:11:18: 11:20
1919
}
2020
}
2121

@@ -34,7 +34,7 @@ fn foo(_1: T, _2: i32) -> i32 {
3434
_8 = move (_5.0: i32); // scope 1 at $DIR/inline-closure.rs:12:5: 12:12
3535
StorageLive(_9); // scope 1 at $DIR/inline-closure.rs:12:5: 12:12
3636
_9 = move (_5.1: i32); // scope 1 at $DIR/inline-closure.rs:12:5: 12:12
37-
_0 = _8; // scope 2 at $DIR/inline-closure.rs:12:5: 12:12
37+
_0 = _8; // scope 2 at $DIR/inline-closure.rs:11:22: 11:24
3838
StorageDead(_9); // scope 1 at $DIR/inline-closure.rs:12:5: 12:12
3939
StorageDead(_8); // scope 1 at $DIR/inline-closure.rs:12:5: 12:12
4040
StorageDead(_7); // scope 1 at $DIR/inline-closure.rs:12:11: 12:12

Diff for: src/test/mir-opt/inline/inline_closure_borrows_arg.foo.Inline.after.mir

+8-8
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ fn foo(_1: T, _2: &i32) -> i32 {
1414
scope 1 {
1515
debug x => _3; // in scope 1 at $DIR/inline-closure-borrows-arg.rs:12:9: 12:10
1616
scope 2 (inlined foo::<T>::{closure#0}) { // at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
17-
debug r => _8; // in scope 2 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
18-
debug _s => _9; // in scope 2 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
19-
let _10: &i32; // in scope 2 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
17+
debug r => _8; // in scope 2 at $DIR/inline-closure-borrows-arg.rs:12:14: 12:15
18+
debug _s => _9; // in scope 2 at $DIR/inline-closure-borrows-arg.rs:12:23: 12:25
19+
let _10: &i32; // in scope 2 at $DIR/inline-closure-borrows-arg.rs:13:13: 13:21
2020
scope 3 {
21-
debug variable => _10; // in scope 3 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
21+
debug variable => _10; // in scope 3 at $DIR/inline-closure-borrows-arg.rs:13:13: 13:21
2222
}
2323
}
2424
}
@@ -38,10 +38,10 @@ fn foo(_1: T, _2: &i32) -> i32 {
3838
_8 = move (_5.0: &i32); // scope 1 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
3939
StorageLive(_9); // scope 1 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
4040
_9 = move (_5.1: &i32); // scope 1 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
41-
StorageLive(_10); // scope 2 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
42-
_10 = _8; // scope 2 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
43-
_0 = (*_10); // scope 3 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
44-
StorageDead(_10); // scope 2 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
41+
StorageLive(_10); // scope 2 at $DIR/inline-closure-borrows-arg.rs:13:13: 13:21
42+
_10 = _8; // scope 2 at $DIR/inline-closure-borrows-arg.rs:13:24: 13:27
43+
_0 = (*_10); // scope 3 at $DIR/inline-closure-borrows-arg.rs:14:9: 14:18
44+
StorageDead(_10); // scope 2 at $DIR/inline-closure-borrows-arg.rs:15:5: 15:6
4545
StorageDead(_9); // scope 1 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
4646
StorageDead(_8); // scope 1 at $DIR/inline-closure-borrows-arg.rs:16:5: 16:12
4747
StorageDead(_7); // scope 1 at $DIR/inline-closure-borrows-arg.rs:16:11: 16:12

Diff for: src/test/mir-opt/inline/inline_closure_captures.foo.Inline.after.mir

+13-13
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ fn foo(_1: T, _2: i32) -> (i32, T) {
1414
scope 1 {
1515
debug x => _3; // in scope 1 at $DIR/inline-closure-captures.rs:11:9: 11:10
1616
scope 2 (inlined foo::<T>::{closure#0}) { // at $DIR/inline-closure-captures.rs:12:5: 12:9
17-
debug _q => _9; // in scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
18-
debug q => (*((*_6).0: &i32)); // in scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
19-
debug t => (*((*_6).1: &T)); // in scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
20-
let mut _10: i32; // in scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
21-
let mut _11: T; // in scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
17+
debug _q => _9; // in scope 2 at $DIR/inline-closure-captures.rs:11:14: 11:16
18+
debug q => (*((*_6).0: &i32)); // in scope 2 at $DIR/inline-closure-captures.rs:10:23: 10:24
19+
debug t => (*((*_6).1: &T)); // in scope 2 at $DIR/inline-closure-captures.rs:10:17: 10:18
20+
let mut _10: i32; // in scope 2 at $DIR/inline-closure-captures.rs:11:19: 11:20
21+
let mut _11: T; // in scope 2 at $DIR/inline-closure-captures.rs:11:22: 11:23
2222
}
2323
}
2424

@@ -40,14 +40,14 @@ fn foo(_1: T, _2: i32) -> (i32, T) {
4040
(_7.0: i32) = move _8; // scope 1 at $DIR/inline-closure-captures.rs:12:5: 12:9
4141
StorageLive(_9); // scope 1 at $DIR/inline-closure-captures.rs:12:5: 12:9
4242
_9 = move (_7.0: i32); // scope 1 at $DIR/inline-closure-captures.rs:12:5: 12:9
43-
StorageLive(_10); // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
44-
_10 = (*((*_6).0: &i32)); // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
45-
StorageLive(_11); // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
46-
_11 = (*((*_6).1: &T)); // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
47-
(_0.0: i32) = move _10; // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
48-
(_0.1: T) = move _11; // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
49-
StorageDead(_11); // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
50-
StorageDead(_10); // scope 2 at $DIR/inline-closure-captures.rs:12:5: 12:9
43+
StorageLive(_10); // scope 2 at $DIR/inline-closure-captures.rs:11:19: 11:20
44+
_10 = (*((*_6).0: &i32)); // scope 2 at $DIR/inline-closure-captures.rs:11:19: 11:20
45+
StorageLive(_11); // scope 2 at $DIR/inline-closure-captures.rs:11:22: 11:23
46+
_11 = (*((*_6).1: &T)); // scope 2 at $DIR/inline-closure-captures.rs:11:22: 11:23
47+
(_0.0: i32) = move _10; // scope 2 at $DIR/inline-closure-captures.rs:11:18: 11:24
48+
(_0.1: T) = move _11; // scope 2 at $DIR/inline-closure-captures.rs:11:18: 11:24
49+
StorageDead(_11); // scope 2 at $DIR/inline-closure-captures.rs:11:23: 11:24
50+
StorageDead(_10); // scope 2 at $DIR/inline-closure-captures.rs:11:23: 11:24
5151
StorageDead(_9); // scope 1 at $DIR/inline-closure-captures.rs:12:5: 12:9
5252
StorageDead(_8); // scope 1 at $DIR/inline-closure-captures.rs:12:8: 12:9
5353
StorageDead(_7); // scope 1 at $DIR/inline-closure-captures.rs:12:8: 12:9

0 commit comments

Comments
 (0)