diff --git a/src/test/incremental/hashes/loop_expressions.rs b/src/test/incremental/hashes/loop_expressions.rs index dcb937fd867..8599f8d7f9a 100644 --- a/src/test/incremental/hashes/loop_expressions.rs +++ b/src/test/incremental/hashes/loop_expressions.rs @@ -179,7 +179,7 @@ pub fn change_continue_label() { } #[cfg(not(cfail1))] -#[rustc_clean(cfg="cfail2", except="HirBody, TypeckTables")] +#[rustc_clean(cfg="cfail2", except="HirBody, MirValidated, TypeckTables")] #[rustc_clean(cfg="cfail3")] pub fn change_continue_label() { let mut _x = 0; diff --git a/src/test/mir-opt/loop_test.rs b/src/test/mir-opt/loop_test.rs new file mode 100644 index 00000000000..d36d8908094 --- /dev/null +++ b/src/test/mir-opt/loop_test.rs @@ -0,0 +1,49 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Z identify_regions -Z emit-end-regions + +// Tests to make sure we correctly generate falseUnwind edges in loops + +fn main() { + // Exit early at runtime. Since only care about the generated MIR + // and not the runtime behavior (which is exercised by other tests) + // we just bail early. Without this the test just loops infinitely. + if true { + return; + } + loop { + let x = 1; + continue; + } +} + +// END RUST SOURCE +// START rustc.main.SimplifyCfg-qualify-consts.after.mir +// ... +// bb1: { // The cleanup block +// resume; +// } +// ... +// bb3: { // Entry into the loop +// _1 = (); +// goto -> bb4; +// } +// bb4: { // The loop_block +// falseUnwind -> [real: bb5, cleanup: bb1]; +// } +// bb5: { // The loop body (body_block) +// StorageLive(_5); +// _5 = const 1i32; +// StorageDead(_5); +// goto -> bb4; +// } +// ... +// END rustc.main.SimplifyCfg-qualify-consts.after.mir