1 // MIR for `main` after SimplifyCfg-elaborate-drops
4 let mut _0: (); // return place in scope 0 at $DIR/retag.rs:+0:11: +0:11
5 let mut _1: i32; // in scope 0 at $DIR/retag.rs:+1:9: +1:14
6 let _2: (); // in scope 0 at $DIR/retag.rs:+2:5: +8:6
7 let mut _4: &Test; // in scope 0 at $DIR/retag.rs:+3:17: +3:36
8 let _5: Test; // in scope 0 at $DIR/retag.rs:+3:17: +3:24
9 let mut _6: &mut i32; // in scope 0 at $DIR/retag.rs:+3:29: +3:35
10 let mut _7: &mut i32; // in scope 0 at $DIR/retag.rs:+3:29: +3:35
11 let mut _9: &mut i32; // in scope 0 at $DIR/retag.rs:+4:19: +4:20
12 let mut _12: *mut i32; // in scope 0 at $DIR/retag.rs:+7:18: +7:29
13 let mut _14: [closure@main::{closure#0}]; // in scope 0 at $DIR/retag.rs:+11:31: +14:6
14 let mut _16: for<'r> fn(&'r i32) -> &'r i32; // in scope 0 at $DIR/retag.rs:+15:14: +15:15
15 let mut _17: &i32; // in scope 0 at $DIR/retag.rs:+15:16: +15:18
16 let _18: &i32; // in scope 0 at $DIR/retag.rs:+15:16: +15:18
17 let _19: &i32; // in scope 0 at $DIR/retag.rs:+18:5: +18:24
18 let mut _20: &Test; // in scope 0 at $DIR/retag.rs:+18:5: +18:24
19 let _21: Test; // in scope 0 at $DIR/retag.rs:+18:5: +18:12
20 let mut _22: &i32; // in scope 0 at $DIR/retag.rs:+18:21: +18:23
21 let _23: &i32; // in scope 0 at $DIR/retag.rs:+18:21: +18:23
22 let _24: i32; // in scope 0 at $DIR/retag.rs:+18:22: +18:23
23 let mut _26: *const i32; // in scope 0 at $DIR/retag.rs:+21:14: +21:28
24 let _27: (); // in scope 0 at $DIR/retag.rs:+23:5: +23:18
26 debug x => _1; // in scope 1 at $DIR/retag.rs:+1:9: +1:14
27 let _3: &mut i32; // in scope 1 at $DIR/retag.rs:+3:13: +3:14
28 let _13: for<'r> fn(&'r i32) -> &'r i32; // in scope 1 at $DIR/retag.rs:+11:9: +11:10
30 debug v => _3; // in scope 2 at $DIR/retag.rs:+3:13: +3:14
31 let _8: &mut i32; // in scope 2 at $DIR/retag.rs:+4:13: +4:14
33 debug w => _8; // in scope 3 at $DIR/retag.rs:+4:13: +4:14
34 let _10: &mut i32; // in scope 3 at $DIR/retag.rs:+5:13: +5:14
36 debug w => _10; // in scope 4 at $DIR/retag.rs:+5:13: +5:14
37 let _11: *mut i32; // in scope 4 at $DIR/retag.rs:+7:13: +7:15
39 debug _w => _11; // in scope 5 at $DIR/retag.rs:+7:13: +7:15
45 debug c => _13; // in scope 6 at $DIR/retag.rs:+11:9: +11:10
46 let _15: &i32; // in scope 6 at $DIR/retag.rs:+15:9: +15:11
48 debug _w => _15; // in scope 7 at $DIR/retag.rs:+15:9: +15:11
49 let _25: *const i32; // in scope 7 at $DIR/retag.rs:+21:9: +21:11
50 let mut _28: &i32; // in scope 7 at $DIR/retag.rs:+18:21: +18:23
52 debug _w => _25; // in scope 8 at $DIR/retag.rs:+21:9: +21:11
59 StorageLive(_1); // scope 0 at $DIR/retag.rs:+1:9: +1:14
60 _1 = const 0_i32; // scope 0 at $DIR/retag.rs:+1:17: +1:18
61 StorageLive(_2); // scope 1 at $DIR/retag.rs:+2:5: +8:6
62 StorageLive(_3); // scope 1 at $DIR/retag.rs:+3:13: +3:14
63 StorageLive(_4); // scope 1 at $DIR/retag.rs:+3:17: +3:36
64 StorageLive(_5); // scope 1 at $DIR/retag.rs:+3:17: +3:24
65 Deinit(_5); // scope 1 at $DIR/retag.rs:+3:17: +3:24
66 (_5.0: i32) = const 0_i32; // scope 1 at $DIR/retag.rs:+3:17: +3:24
67 _4 = &_5; // scope 1 at $DIR/retag.rs:+3:17: +3:36
68 Retag(_4); // scope 1 at $DIR/retag.rs:+3:17: +3:36
69 StorageLive(_6); // scope 1 at $DIR/retag.rs:+3:29: +3:35
70 StorageLive(_7); // scope 1 at $DIR/retag.rs:+3:29: +3:35
71 _7 = &mut _1; // scope 1 at $DIR/retag.rs:+3:29: +3:35
72 Retag(_7); // scope 1 at $DIR/retag.rs:+3:29: +3:35
73 _6 = &mut (*_7); // scope 1 at $DIR/retag.rs:+3:29: +3:35
74 Retag([2phase] _6); // scope 1 at $DIR/retag.rs:+3:29: +3:35
75 _3 = Test::foo(move _4, move _6) -> [return: bb1, unwind: bb8]; // scope 1 at $DIR/retag.rs:+3:17: +3:36
77 // + span: $DIR/retag.rs:33:25: 33:28
78 // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x mut i32) -> &'x mut i32 {Test::foo}, val: Value(<ZST>) }
82 Retag(_3); // scope 1 at $DIR/retag.rs:+3:17: +3:36
83 StorageDead(_6); // scope 1 at $DIR/retag.rs:+3:35: +3:36
84 StorageDead(_4); // scope 1 at $DIR/retag.rs:+3:35: +3:36
85 StorageDead(_7); // scope 1 at $DIR/retag.rs:+3:36: +3:37
86 drop(_5) -> [return: bb2, unwind: bb9]; // scope 1 at $DIR/retag.rs:+3:36: +3:37
90 StorageDead(_5); // scope 1 at $DIR/retag.rs:+3:36: +3:37
91 StorageLive(_8); // scope 2 at $DIR/retag.rs:+4:13: +4:14
92 StorageLive(_9); // scope 2 at $DIR/retag.rs:+4:19: +4:20
93 _9 = move _3; // scope 2 at $DIR/retag.rs:+4:19: +4:20
94 Retag(_9); // scope 2 at $DIR/retag.rs:+4:19: +4:20
95 _8 = &mut (*_9); // scope 2 at $DIR/retag.rs:+4:19: +4:20
96 Retag(_8); // scope 2 at $DIR/retag.rs:+4:19: +4:20
97 StorageDead(_9); // scope 2 at $DIR/retag.rs:+4:22: +4:23
98 StorageLive(_10); // scope 3 at $DIR/retag.rs:+5:13: +5:14
99 _10 = move _8; // scope 3 at $DIR/retag.rs:+5:17: +5:18
100 Retag(_10); // scope 3 at $DIR/retag.rs:+5:17: +5:18
101 StorageLive(_11); // scope 4 at $DIR/retag.rs:+7:13: +7:15
102 StorageLive(_12); // scope 4 at $DIR/retag.rs:+7:18: +7:29
103 _12 = &raw mut (*_10); // scope 4 at $DIR/retag.rs:+7:18: +7:19
104 Retag([raw] _12); // scope 4 at $DIR/retag.rs:+7:18: +7:19
105 _11 = _12; // scope 4 at $DIR/retag.rs:+7:18: +7:29
106 StorageDead(_12); // scope 4 at $DIR/retag.rs:+7:29: +7:30
107 _2 = const (); // scope 1 at $DIR/retag.rs:+2:5: +8:6
108 StorageDead(_11); // scope 4 at $DIR/retag.rs:+8:5: +8:6
109 StorageDead(_10); // scope 3 at $DIR/retag.rs:+8:5: +8:6
110 StorageDead(_8); // scope 2 at $DIR/retag.rs:+8:5: +8:6
111 StorageDead(_3); // scope 1 at $DIR/retag.rs:+8:5: +8:6
112 StorageDead(_2); // scope 1 at $DIR/retag.rs:+8:5: +8:6
113 StorageLive(_13); // scope 1 at $DIR/retag.rs:+11:9: +11:10
114 StorageLive(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
115 Deinit(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
116 Retag(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
117 _13 = move _14 as for<'r> fn(&'r i32) -> &'r i32 (Pointer(ClosureFnPointer(Normal))); // scope 1 at $DIR/retag.rs:+11:31: +14:6
118 StorageDead(_14); // scope 1 at $DIR/retag.rs:+11:47: +11:48
119 StorageLive(_15); // scope 6 at $DIR/retag.rs:+15:9: +15:11
120 StorageLive(_16); // scope 6 at $DIR/retag.rs:+15:14: +15:15
121 _16 = _13; // scope 6 at $DIR/retag.rs:+15:14: +15:15
122 StorageLive(_17); // scope 6 at $DIR/retag.rs:+15:16: +15:18
123 StorageLive(_18); // scope 6 at $DIR/retag.rs:+15:16: +15:18
124 _18 = &_1; // scope 6 at $DIR/retag.rs:+15:16: +15:18
125 Retag(_18); // scope 6 at $DIR/retag.rs:+15:16: +15:18
126 _17 = &(*_18); // scope 6 at $DIR/retag.rs:+15:16: +15:18
127 Retag(_17); // scope 6 at $DIR/retag.rs:+15:16: +15:18
128 _15 = move _16(move _17) -> bb3; // scope 6 at $DIR/retag.rs:+15:14: +15:19
132 Retag(_15); // scope 6 at $DIR/retag.rs:+15:14: +15:19
133 StorageDead(_17); // scope 6 at $DIR/retag.rs:+15:18: +15:19
134 StorageDead(_16); // scope 6 at $DIR/retag.rs:+15:18: +15:19
135 StorageDead(_18); // scope 6 at $DIR/retag.rs:+15:19: +15:20
136 StorageLive(_19); // scope 7 at $DIR/retag.rs:+18:5: +18:24
137 StorageLive(_20); // scope 7 at $DIR/retag.rs:+18:5: +18:24
138 StorageLive(_21); // scope 7 at $DIR/retag.rs:+18:5: +18:12
139 Deinit(_21); // scope 7 at $DIR/retag.rs:+18:5: +18:12
140 (_21.0: i32) = const 0_i32; // scope 7 at $DIR/retag.rs:+18:5: +18:12
141 _20 = &_21; // scope 7 at $DIR/retag.rs:+18:5: +18:24
142 Retag(_20); // scope 7 at $DIR/retag.rs:+18:5: +18:24
143 StorageLive(_22); // scope 7 at $DIR/retag.rs:+18:21: +18:23
144 StorageLive(_23); // scope 7 at $DIR/retag.rs:+18:21: +18:23
145 _28 = const main::promoted[0]; // scope 7 at $DIR/retag.rs:+18:21: +18:23
147 // + span: $DIR/retag.rs:48:21: 48:23
148 // + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
149 Retag(_28); // scope 7 at $DIR/retag.rs:+18:21: +18:23
150 _23 = &(*_28); // scope 7 at $DIR/retag.rs:+18:21: +18:23
151 Retag(_23); // scope 7 at $DIR/retag.rs:+18:21: +18:23
152 _22 = &(*_23); // scope 7 at $DIR/retag.rs:+18:21: +18:23
153 Retag(_22); // scope 7 at $DIR/retag.rs:+18:21: +18:23
154 _19 = Test::foo_shr(move _20, move _22) -> [return: bb4, unwind: bb7]; // scope 7 at $DIR/retag.rs:+18:5: +18:24
156 // + span: $DIR/retag.rs:48:13: 48:20
157 // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x i32) -> &'x i32 {Test::foo_shr}, val: Value(<ZST>) }
161 Retag(_19); // scope 7 at $DIR/retag.rs:+18:5: +18:24
162 StorageDead(_22); // scope 7 at $DIR/retag.rs:+18:23: +18:24
163 StorageDead(_20); // scope 7 at $DIR/retag.rs:+18:23: +18:24
164 StorageDead(_23); // scope 7 at $DIR/retag.rs:+18:24: +18:25
165 drop(_21) -> [return: bb5, unwind: bb9]; // scope 7 at $DIR/retag.rs:+18:24: +18:25
169 StorageDead(_21); // scope 7 at $DIR/retag.rs:+18:24: +18:25
170 StorageDead(_19); // scope 7 at $DIR/retag.rs:+18:24: +18:25
171 StorageLive(_25); // scope 7 at $DIR/retag.rs:+21:9: +21:11
172 StorageLive(_26); // scope 7 at $DIR/retag.rs:+21:14: +21:28
173 _26 = &raw const (*_15); // scope 7 at $DIR/retag.rs:+21:14: +21:16
174 Retag([raw] _26); // scope 7 at $DIR/retag.rs:+21:14: +21:16
175 _25 = _26; // scope 7 at $DIR/retag.rs:+21:14: +21:28
176 StorageDead(_26); // scope 7 at $DIR/retag.rs:+21:28: +21:29
177 StorageLive(_27); // scope 8 at $DIR/retag.rs:+23:5: +23:18
178 _27 = array_casts() -> bb6; // scope 8 at $DIR/retag.rs:+23:5: +23:18
180 // + span: $DIR/retag.rs:53:5: 53:16
181 // + literal: Const { ty: fn() {array_casts}, val: Value(<ZST>) }
185 StorageDead(_27); // scope 8 at $DIR/retag.rs:+23:18: +23:19
186 _0 = const (); // scope 0 at $DIR/retag.rs:+0:11: +24:2
187 StorageDead(_25); // scope 7 at $DIR/retag.rs:+24:1: +24:2
188 StorageDead(_15); // scope 6 at $DIR/retag.rs:+24:1: +24:2
189 StorageDead(_13); // scope 1 at $DIR/retag.rs:+24:1: +24:2
190 StorageDead(_1); // scope 0 at $DIR/retag.rs:+24:1: +24:2
191 return; // scope 0 at $DIR/retag.rs:+24:2: +24:2
195 drop(_21) -> bb9; // scope 7 at $DIR/retag.rs:+18:24: +18:25
199 drop(_5) -> bb9; // scope 1 at $DIR/retag.rs:+3:36: +3:37
203 resume; // scope 0 at $DIR/retag.rs:+0:1: +24:2