Auto merge of #22574 - huonw:remove-lame-statics, r=alexcirchton
Add a basic test that checks that the types catch the most glaring errors that could occur. cc #22444
This commit is contained in:
commit
dcc6ce2c77
12 changed files with 147 additions and 45 deletions
46
src/test/compile-fail/send-is-not-static-std-sync-2.rs
Normal file
46
src/test/compile-fail/send-is-not-static-std-sync-2.rs
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
// Copyright 2015 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.
|
||||
|
||||
// basic tests to see that certain "obvious" errors are caught by
|
||||
// these types no longer requiring `'static` (RFC 458)
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
use std::sync::{Mutex, RwLock, mpsc};
|
||||
|
||||
fn mutex() {
|
||||
let lock = {
|
||||
let x = 1;
|
||||
Mutex::new(&x) //~ ERROR does not live long enough
|
||||
};
|
||||
|
||||
let _dangling = *lock.lock().unwrap();
|
||||
}
|
||||
|
||||
fn rwlock() {
|
||||
let lock = {
|
||||
let x = 1;
|
||||
RwLock::new(&x) //~ ERROR does not live long enough
|
||||
};
|
||||
let _dangling = *lock.read().unwrap();
|
||||
}
|
||||
|
||||
fn channel() {
|
||||
let (_tx, rx) = {
|
||||
let x = 1;
|
||||
let (tx, rx) = mpsc::channel();
|
||||
let _ = tx.send(&x); //~ ERROR does not live long enough
|
||||
(tx, rx)
|
||||
};
|
||||
|
||||
let _dangling = rx.recv();
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
56
src/test/compile-fail/send-is-not-static-std-sync.rs
Normal file
56
src/test/compile-fail/send-is-not-static-std-sync.rs
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
// Copyright 2015 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.
|
||||
|
||||
// basic tests to see that certain "obvious" errors are caught by
|
||||
// these types no longer requiring `'static` (RFC 458)
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
use std::sync::{Mutex, RwLock, mpsc};
|
||||
|
||||
fn mutex() {
|
||||
let x = 1;
|
||||
let y = Box::new(1);
|
||||
let lock = Mutex::new(&x);
|
||||
*lock.lock().unwrap() = &*y;
|
||||
drop(y); //~ ERROR cannot move out
|
||||
{
|
||||
let z = 2;
|
||||
*lock.lock().unwrap() = &z; //~ ERROR does not live long enough
|
||||
}
|
||||
}
|
||||
|
||||
fn rwlock() {
|
||||
let x = 1;
|
||||
let y = Box::new(1);
|
||||
let lock = RwLock::new(&x);
|
||||
*lock.write().unwrap() = &*y;
|
||||
drop(y); //~ ERROR cannot move out
|
||||
{
|
||||
let z = 2;
|
||||
*lock.write().unwrap() = &z; //~ ERROR does not live long enough
|
||||
}
|
||||
}
|
||||
|
||||
fn channel() {
|
||||
let x = 1;
|
||||
let y = Box::new(1);
|
||||
let (tx, rx) = mpsc::channel();
|
||||
|
||||
tx.send(&x).unwrap();
|
||||
tx.send(&*y);
|
||||
drop(y); //~ ERROR cannot move out
|
||||
{
|
||||
let z = 2;
|
||||
tx.send(&z).unwrap(); //~ ERROR does not live long enough
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue