Zero locals with initializers that may break or terminate. Closes #787
This commit is contained in:
parent
c011f13144
commit
c1f2394245
2 changed files with 92 additions and 1 deletions
51
src/test/run-pass/terminate-in-initializer.rs
Normal file
51
src/test/run-pass/terminate-in-initializer.rs
Normal file
|
@ -0,0 +1,51 @@
|
|||
// Issue #787
|
||||
// Don't try to clean up uninitizaed locals
|
||||
|
||||
use std;
|
||||
|
||||
fn test_break() {
|
||||
while true {
|
||||
let x: @int = break;
|
||||
}
|
||||
}
|
||||
|
||||
fn test_cont() {
|
||||
let i = 0;
|
||||
while i < 1 {
|
||||
i += 1;
|
||||
let x: @int = cont;
|
||||
}
|
||||
}
|
||||
|
||||
fn test_ret() {
|
||||
let x: @int = ret;
|
||||
}
|
||||
|
||||
fn test_fail() {
|
||||
fn f() {
|
||||
std::task::unsupervise();
|
||||
let x: @int = fail;
|
||||
}
|
||||
let g = f;
|
||||
std::task::spawn(g);
|
||||
}
|
||||
|
||||
fn test_fail_indirect() {
|
||||
fn f() -> ! {
|
||||
fail;
|
||||
}
|
||||
fn g() {
|
||||
std::task::unsupervise();
|
||||
let x: @int = f();
|
||||
}
|
||||
let h = g;
|
||||
std::task::spawn(h);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
test_break();
|
||||
test_cont();
|
||||
test_ret();
|
||||
test_fail();
|
||||
test_fail_indirect();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue