Skip to content

Commit 85dfa9d

Browse files
Fix tests for MIR loop lowering
Fixes the hash test to recognize that MirValidated can change when changing around labels, and add a new test that makes sure we're lowering loop statements correctly.
1 parent 8e0c3f5 commit 85dfa9d

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

src/test/incremental/hashes/loop_expressions.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ pub fn change_continue_label() {
179179
}
180180

181181
#[cfg(not(cfail1))]
182-
#[rustc_clean(cfg="cfail2", except="HirBody, TypeckTables")]
182+
#[rustc_clean(cfg="cfail2", except="HirBody, MirValidated, TypeckTables")]
183183
#[rustc_clean(cfg="cfail3")]
184184
pub fn change_continue_label() {
185185
let mut _x = 0;

src/test/mir-opt/loop_test.rs

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// compile-flags: -Z identify_regions -Z emit-end-regions
12+
13+
// Tests to make sure we correctly generate falseUnwind edges in loops
14+
15+
fn main() {
16+
// Exit early at runtime. Since only care about the generated MIR
17+
// and not the runtime behavior (which is exercised by other tests)
18+
// we just bail early. Without this the test just loops infinitely.
19+
if true {
20+
return;
21+
}
22+
loop {
23+
let x = 1;
24+
continue;
25+
}
26+
}
27+
28+
// END RUST SOURCE
29+
// START rustc.main.SimplifyCfg-qualify-consts.after.mir
30+
// ...
31+
// bb1: { // The cleanup block
32+
// resume;
33+
// }
34+
// ...
35+
// bb3: { // Entry into the loop
36+
// _1 = ();
37+
// goto -> bb4;
38+
// }
39+
// bb4: { // The loop_block
40+
// falseUnwind -> [real: bb5, cleanup: bb1];
41+
// }
42+
// bb5: { // The loop body (body_block)
43+
// StorageLive(_5);
44+
// _5 = const 1i32;
45+
// StorageDead(_5);
46+
// goto -> bb4;
47+
// }
48+
// ...
49+
// END rustc.main.SimplifyCfg-qualify-consts.after.mir

0 commit comments

Comments
 (0)