]> git.lizzy.rs Git - rust.git/commitdiff
Fix off-by-one when emitting StorageDead for vars
authorJonas Schievink <jonasschievink@gmail.com>
Mon, 26 Sep 2016 20:16:35 +0000 (22:16 +0200)
committerJonas Schievink <jonasschievink@gmail.com>
Mon, 26 Sep 2016 20:30:56 +0000 (22:30 +0200)
src/librustc_mir/build/scope.rs
src/test/mir-opt/storage_ranges.rs

index 88c2c17476eaf827eeeb197259f05e0a81fb539c..01cce3c7dd79474d2b2c55fc8a7091474f032dde 100644 (file)
@@ -462,7 +462,7 @@ pub fn schedule_drop(&mut self,
         } 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
             }
         };
index e2dd1bc3795ab050d961e3925ebeb75d64d5ce1b..a4905281e4636bf703bc13f46afe2b20fffc419c 100644 (file)
@@ -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
 //     }
 //