Add rw_arc.downgrade() + std and cfail tests. Tons of region FIXMEs... (cf #2282, #3154)

This commit is contained in:
Ben Blum 2012-08-14 13:32:41 -04:00
parent 1779ab4754
commit 589ee65fd4
12 changed files with 365 additions and 28 deletions

View file

@ -0,0 +1,11 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::arc;
fn main() {
let x = ~arc::rw_arc(1);
let mut y = none;
do x.write_cond |_one, cond| {
y = some(cond);
}
option::unwrap(y).wait();
}

View file

@ -0,0 +1,12 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::arc;
fn main() {
let x = ~arc::rw_arc(1);
let mut y = none;
do x.write_downgrade |write_mode| {
y = some(x.downgrade(write_mode));
}
// Adding this line causes a method unification failure instead
// do (&option::unwrap(y)).read |state| { assert *state == 1; }
}

View file

@ -0,0 +1,13 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::arc;
fn main() {
let x = ~arc::rw_arc(1);
let mut y = none;
do x.write_downgrade |write_mode| {
do (&write_mode).write_cond |_one, cond| {
y = some(cond);
}
}
option::unwrap(y).wait();
}

View file

@ -0,0 +1,12 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::arc;
fn main() {
let x = ~arc::rw_arc(1);
let mut y = none;
do x.write_downgrade |write_mode| {
y = some(write_mode);
}
// Adding this line causes a method unification failure instead
// do (&option::unwrap(y)).write |state| { assert *state == 1; }
}

View file

@ -0,0 +1,11 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::sync;
fn main() {
let x = ~sync::rwlock();
let mut y = none;
do x.write_cond |cond| {
y = some(cond);
}
option::unwrap(y).wait();
}

View file

@ -0,0 +1,12 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::sync;
fn main() {
let x = ~sync::rwlock();
let mut y = none;
do x.write_downgrade |write_mode| {
y = some(x.downgrade(write_mode));
}
// Adding this line causes a method unification failure instead
// do (&option::unwrap(y)).read { }
}

View file

@ -0,0 +1,13 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::sync;
fn main() {
let x = ~sync::rwlock();
let mut y = none;
do x.write_downgrade |write_mode| {
do (&write_mode).write_cond |cond| {
y = some(cond);
}
}
option::unwrap(y).wait();
}

View file

@ -0,0 +1,12 @@
// error-pattern: reference is not valid outside of its lifetime
use std;
import std::sync;
fn main() {
let x = ~sync::rwlock();
let mut y = none;
do x.write_downgrade |write_mode| {
y = some(write_mode);
}
// Adding this line causes a method unification failure instead
// do (&option::unwrap(y)).write { }
}