diff options
| author | bors <bors@rust-lang.org> | 2018-07-13 00:38:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-07-13 00:38:17 +0000 |
| commit | e92e9ce0d8383ac0126467294575401c00e3b60a (patch) | |
| tree | d527a48f741b38521be5890f83ab313b5385c7f6 /src/test/mir-opt | |
| parent | 64f7de92166f1f7d940575feff57ac33bc384550 (diff) | |
| parent | 9c15a6606eff9c5821921f5cb6be305ccf8005de (diff) | |
| download | rust-e92e9ce0d8383ac0126467294575401c00e3b60a.tar.gz rust-e92e9ce0d8383ac0126467294575401c00e3b60a.zip | |
Auto merge of #52046 - cramertj:fix-generator-mir, r=eddyb
Ensure StorageDead is created even if variable initialization fails Rebase and slight cleanup of https://github.com/rust-lang/rust/pull/51109 Fixes https://github.com/rust-lang/rust/issues/49232 r? @eddyb
Diffstat (limited to 'src/test/mir-opt')
| -rw-r--r-- | src/test/mir-opt/issue-49232.rs | 148 | ||||
| -rw-r--r-- | src/test/mir-opt/storage_ranges.rs | 2 |
2 files changed, 149 insertions, 1 deletions
diff --git a/src/test/mir-opt/issue-49232.rs b/src/test/mir-opt/issue-49232.rs new file mode 100644 index 00000000000..8e5a94abeed --- /dev/null +++ b/src/test/mir-opt/issue-49232.rs @@ -0,0 +1,148 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// We must mark a variable whose initialization fails due to an +// abort statement as StorageDead. + +fn main() { + loop { + let beacon = { + match true { + false => 4, + true => break, + } + }; + drop(&beacon); + } +} + +// END RUST SOURCE +// START rustc.main.mir_map.0.mir +// fn main() -> (){ +// let mut _0: (); +// scope 1 { +// } +// scope 2 { +// let _2: i32; +// } +// let mut _1: (); +// let mut _3: bool; +// let mut _4: u8; +// let mut _5: !; +// let mut _6: (); +// let mut _7: &i32; +// bb0: { +// goto -> bb1; +// } +// bb1: { +// falseUnwind -> [real: bb3, cleanup: bb4]; +// } +// bb2: { +// goto -> bb29; +// } +// bb3: { +// StorageLive(_2); +// StorageLive(_3); +// _3 = const true; +// _4 = discriminant(_3); +// switchInt(_3) -> [false: bb11, otherwise: bb10]; +// } +// bb4: { +// resume; +// } +// bb5: { +// _2 = const 4i32; +// goto -> bb14; +// } +// bb6: { +// _0 = (); +// goto -> bb15; +// } +// bb7: { +// falseEdges -> [real: bb12, imaginary: bb8]; +// } +// bb8: { +// falseEdges -> [real: bb13, imaginary: bb9]; +// } +// bb9: { +// unreachable; +// } +// bb10: { +// goto -> bb8; +// } +// bb11: { +// goto -> bb7; +// } +// bb12: { +// goto -> bb5; +// } +// bb13: { +// goto -> bb6; +// } +// bb14: { +// StorageDead(_3); +// StorageLive(_7); +// _7 = &_2; +// _6 = const std::mem::drop(move _7) -> [return: bb28, unwind: bb4]; +// } +// bb15: { +// goto -> bb16; +// } +// bb16: { +// goto -> bb17; +// } +// bb17: { +// goto -> bb18; +// } +// bb18: { +// goto -> bb19; +// } +// bb19: { +// goto -> bb20; +// } +// bb20: { +// StorageDead(_3); +// goto -> bb21; +// } +// bb21: { +// goto -> bb22; +// } +// bb22: { +// StorageDead(_2); +// goto -> bb23; +// } +// bb23: { +// goto -> bb24; +// } +// bb24: { +// goto -> bb25; +// } +// bb25: { +// goto -> bb2; +// } +// bb26: { +// _5 = (); +// unreachable; +// } +// bb27: { +// StorageDead(_5); +// goto -> bb14; +// } +// bb28: { +// StorageDead(_7); +// _1 = (); +// StorageDead(_2); +// goto -> bb1; +// } +// bb29: { +// return; +// } +// } +// END rustc.main.mir_map.0.mir diff --git a/src/test/mir-opt/storage_ranges.rs b/src/test/mir-opt/storage_ranges.rs index 41eaf67d292..16e30f84d17 100644 --- a/src/test/mir-opt/storage_ranges.rs +++ b/src/test/mir-opt/storage_ranges.rs @@ -31,8 +31,8 @@ fn main() { // StorageDead(_5); // _3 = &_4; // _2 = (); -// StorageDead(_3); // StorageDead(_4); +// StorageDead(_3); // StorageLive(_6); // _6 = const 1i32; // _0 = (); |
