From e75feea6966c33fd5da37cbb49ba2bc571648935 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Mon, 26 Sep 2016 22:16:35 +0200 Subject: [PATCH] Fix off-by-one when emitting StorageDead for vars --- src/librustc_mir/build/scope.rs | 2 +- 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 @@ 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 } }; 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 // } // -- 2.44.0