Skip to content

Commit 539f208

Browse files
committed
Auto merge of rust-lang#44129 - pnkfelix:fix-end-region-emission-order, r=nmatsakis
Fix end region emission order Fix rust-lang#43481
2 parents 824952f + 5fa0b66 commit 539f208

14 files changed

+319
-23
lines changed

src/librustc_mir/build/scope.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -352,14 +352,15 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
352352
}
353353
let scope = self.scopes.pop().unwrap();
354354
assert_eq!(scope.region_scope, region_scope.0);
355+
356+
self.cfg.push_end_region(self.hir.tcx(), block, region_scope.1, scope.region_scope);
355357
unpack!(block = build_scope_drops(&mut self.cfg,
356358
&scope,
357359
&self.scopes,
358360
block,
359361
self.arg_count,
360362
false));
361363

362-
self.cfg.push_end_region(self.hir.tcx(), block, region_scope.1, scope.region_scope);
363364
block.unit()
364365
}
365366

@@ -406,15 +407,16 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
406407
scope.cached_exits.insert((target, region_scope.0), b);
407408
b
408409
};
410+
411+
// End all regions for scopes out of which we are breaking.
412+
self.cfg.push_end_region(self.hir.tcx(), block, region_scope.1, scope.region_scope);
413+
409414
unpack!(block = build_scope_drops(&mut self.cfg,
410415
scope,
411416
rest,
412417
block,
413418
self.arg_count,
414419
false));
415-
416-
// End all regions for scopes out of which we are breaking.
417-
self.cfg.push_end_region(self.hir.tcx(), block, region_scope.1, scope.region_scope);
418420
}
419421
}
420422
let scope = &self.scopes[len - scope_count];

src/test/mir-opt/end_region_1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ fn main() {
3030
// StorageLive(_2);
3131
// _2 = &'10_1rs _1;
3232
// _0 = ();
33-
// StorageDead(_2);
3433
// EndRegion('10_1rs);
34+
// StorageDead(_2);
3535
// StorageDead(_1);
3636
// return;
3737
// }

src/test/mir-opt/end_region_2.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ fn main() {
4646
// bb2: {
4747
// _0 = ();
4848
// StorageDead(_5);
49-
// StorageDead(_3);
5049
// EndRegion('23_1rs);
50+
// StorageDead(_3);
5151
// StorageDead(_2);
5252
// return;
5353
// }
@@ -56,10 +56,10 @@ fn main() {
5656
// StorageLive(_7);
5757
// _7 = &'23_3rs _2;
5858
// _1 = ();
59-
// StorageDead(_7);
6059
// EndRegion('23_3rs);
61-
// StorageDead(_3);
60+
// StorageDead(_7);
6261
// EndRegion('23_1rs);
62+
// StorageDead(_3);
6363
// StorageDead(_2);
6464
// goto -> bb1;
6565
// }

src/test/mir-opt/end_region_3.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ fn main() {
4949
// bb2: {
5050
// _0 = ();
5151
// StorageDead(_5);
52-
// StorageDead(_3);
5352
// EndRegion('26_1rs);
53+
// StorageDead(_3);
5454
// StorageDead(_1);
5555
// return;
5656
// }
@@ -60,10 +60,10 @@ fn main() {
6060
// StorageLive(_7);
6161
// _7 = &'26_3rs _1;
6262
// _2 = ();
63-
// StorageDead(_7);
6463
// EndRegion('26_3rs);
65-
// StorageDead(_3);
64+
// StorageDead(_7);
6665
// EndRegion('26_1rs);
66+
// StorageDead(_3);
6767
// goto -> bb1;
6868
// }
6969
// END rustc.node4.SimplifyCfg-qualify-consts.after.mir

src/test/mir-opt/end_region_4.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ fn foo(i: i32) {
5353
// StorageLive(_6);
5454
// _6 = &'26_4rs _2;
5555
// _0 = ();
56-
// StorageDead(_6);
5756
// EndRegion('26_4rs);
58-
// StorageDead(_3);
57+
// StorageDead(_6);
5958
// EndRegion('26_2rs);
59+
// StorageDead(_3);
6060
// StorageDead(_2);
6161
// drop(_1) -> bb4;
6262
// }

src/test/mir-opt/end_region_5.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ fn foo<F>(f: F) where F: FnOnce() -> i32 {
4444
// _2 = const foo(_3) -> [return: bb1, unwind: bb3];
4545
// }
4646
// bb1: {
47-
// StorageDead(_3);
4847
// EndRegion('14s);
48+
// StorageDead(_3);
4949
// _0 = ();
5050
// drop(_1) -> bb4;
5151
// }

src/test/mir-opt/end_region_6.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ fn foo<F>(f: F) where F: FnOnce() -> i32 {
4444
// _2 = const foo(_3) -> [return: bb1, unwind: bb3];
4545
// }
4646
// bb1: {
47-
// StorageDead(_3);
4847
// EndRegion('19s);
48+
// StorageDead(_3);
4949
// _0 = ();
5050
// drop(_1) -> bb4;
5151
// }
@@ -75,8 +75,8 @@ fn foo<F>(f: F) where F: FnOnce() -> i32 {
7575
// _3 = ((*_2).0: i32);
7676
// _0 = _3;
7777
// StorageDead(_3);
78-
// StorageDead(_2);
7978
// EndRegion('15_0rs);
79+
// StorageDead(_2);
8080
// return;
8181
// }
8282
// END rustc.node22.SimplifyCfg-qualify-consts.after.mir

src/test/mir-opt/end_region_7.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ fn foo<F>(f: F) where F: FnOnce() -> i32 {
8484
// _3 = ((*_2).0: i32);
8585
// _0 = _3;
8686
// StorageDead(_3);
87-
// StorageDead(_2);
8887
// EndRegion('15_0rs);
88+
// StorageDead(_2);
8989
// drop(_1) -> bb1;
9090
// }
9191
// bb1: {

src/test/mir-opt/end_region_8.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ fn foo<F>(f: F) where F: FnOnce() -> i32 {
5050
// bb1: {
5151
// StorageDead(_4);
5252
// _0 = ();
53-
// StorageDead(_2);
5453
// EndRegion('21_1rs);
54+
// StorageDead(_2);
5555
// drop(_1) -> bb4;
5656
// }
5757
// bb2: {

src/test/mir-opt/end_region_9.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fn main() {
4242
// let mut _0: ();
4343
// let mut _1: bool;
4444
// let _2: i32;
45-
// let mut _4: &'13_0rs i32;
45+
// let mut _4: &'33_0rs i32;
4646
// let mut _3: ();
4747
// let mut _5: !;
4848
// let mut _6: ();
@@ -67,19 +67,20 @@ fn main() {
6767
// bb2: {
6868
// _0 = ();
6969
// StorageDead(_7);
70+
// EndRegion('33_0rs);
7071
// StorageDead(_4);
71-
// EndRegion('13_0rs);
7272
// StorageDead(_2);
7373
// StorageDead(_1);
7474
// return;
7575
// }
7676
//
7777
// bb3: {
78-
// _4 = &'13_0rs _2;
78+
// _4 = &'33_0rs _2;
7979
// _6 = ();
8080
// StorageDead(_7);
8181
// _1 = const true;
8282
// _3 = ();
8383
// goto -> bb1;
8484
// }
8585
// }
86+
// END rustc.node4.SimplifyCfg-qualify-consts.after.mir

0 commit comments

Comments
 (0)