diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2016-09-26 22:16:35 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonasschievink@gmail.com> | 2016-09-26 22:30:56 +0200 |
| commit | e75feea6966c33fd5da37cbb49ba2bc571648935 (patch) | |
| tree | aed277978cdc3600102406a6483c6ada7467bd95 /src | |
| parent | 393db2d83089b3940fa2fe77f1241ca4625fe883 (diff) | |
| download | rust-e75feea6966c33fd5da37cbb49ba2bc571648935.tar.gz rust-e75feea6966c33fd5da37cbb49ba2bc571648935.zip | |
Fix off-by-one when emitting StorageDead for vars
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/build/scope.rs | 2 | ||||
| -rw-r--r-- | src/test/mir-opt/storage_ranges.rs | 3 |
2 files changed, 2 insertions, 3 deletions
diff --git a/src/librustc_mir/build/scope.rs b/src/librustc_mir/build/scope.rs index 88c2c17476e..01cce3c7dd7 100644 --- a/src/librustc_mir/build/scope.rs +++ b/src/librustc_mir/build/scope.rs @@ -462,7 +462,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { } else { // Only temps and vars need their storage dead. match *lvalue { - Lvalue::Local(index) if index.index() > self.arg_count + 1 => DropKind::Storage, + Lvalue::Local(index) if index.index() > self.arg_count => DropKind::Storage, _ => return } }; diff --git a/src/test/mir-opt/storage_ranges.rs b/src/test/mir-opt/storage_ranges.rs index e2dd1bc3795..a4905281e46 100644 --- a/src/test/mir-opt/storage_ranges.rs +++ b/src/test/mir-opt/storage_ranges.rs @@ -18,8 +18,6 @@ fn main() { let c = 1; } -// TODO The StorageDead for local1 (a) after local6's (c) is missing! - // END RUST SOURCE // START rustc.node4.TypeckMir.before.mir // bb0: { @@ -39,6 +37,7 @@ fn main() { // local6 = const 1i32; // scope 1 at storage_ranges.rs:16:13: 16:14 // local0 = (); // scope 3 at storage_ranges.rs:11:11: 17:2 // StorageDead(local6); // scope 1 at storage_ranges.rs:16:9: 16:10 +// StorageDead(local1); // scope 0 at storage_ranges.rs:14:9: 14:10 // goto -> bb1; // scope 0 at storage_ranges.rs:11:1: 17:2 // } // |
