about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJonas Schievink <jonasschievink@gmail.com>2016-09-26 22:16:35 +0200
committerJonas Schievink <jonasschievink@gmail.com>2016-09-26 22:30:56 +0200
commite75feea6966c33fd5da37cbb49ba2bc571648935 (patch)
treeaed277978cdc3600102406a6483c6ada7467bd95 /src
parent393db2d83089b3940fa2fe77f1241ca4625fe883 (diff)
downloadrust-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.rs2
-rw-r--r--src/test/mir-opt/storage_ranges.rs3
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
 //     }
 //