mirror of
https://github.com/rust-lang/rust
synced 2024-09-06 01:11:17 +00:00
![Alex Crichton](/assets/img/avatar_default.png)
This commit is extracted from #122036 and adds a new directive to the `compiletest` test runner, `//@ needs-threads`. This is intended to capture the need that a target must implement threading to execute a specific test, typically one that uses `std::thread`. This is primarily done for WebAssembly targets which currently do not have threads by default. This enables transitioning a lot of `//@ ignore-wasm*`-style ignores into a more self-documenting `//@ needs-threads` directive. Additionally the `wasm32-wasi-preview1-threads` target, for example, does actually have threads, but isn't tested in CI at this time. This change enables running these tests for that target, but not other wasm targets.
50 lines
1 KiB
Rust
50 lines
1 KiB
Rust
//@ run-pass
|
|
//@ needs-threads
|
|
//@ ignore-sgx no processes
|
|
|
|
use std::cell::RefCell;
|
|
use std::env;
|
|
use std::process::Command;
|
|
|
|
fn main() {
|
|
let name = "YOU_ARE_THE_TEST";
|
|
if env::var(name).is_ok() {
|
|
std::thread::spawn(|| {
|
|
TLS.with(|f| f.borrow().ensure());
|
|
})
|
|
.join()
|
|
.unwrap();
|
|
} else {
|
|
let me = env::current_exe().unwrap();
|
|
let output = Command::new(&me).env(name, "1").output().unwrap();
|
|
println!("{:?}", output);
|
|
assert!(output.status.success());
|
|
let stderr = String::from_utf8(output.stderr).unwrap();
|
|
assert!(stderr.contains("hello new\n"));
|
|
assert!(stderr.contains("hello drop\n"));
|
|
}
|
|
}
|
|
|
|
struct Stuff {
|
|
_x: usize,
|
|
}
|
|
|
|
impl Stuff {
|
|
fn new() -> Self {
|
|
eprintln!("hello new");
|
|
Self { _x: 0 }
|
|
}
|
|
|
|
fn ensure(&self) {}
|
|
}
|
|
|
|
impl Drop for Stuff {
|
|
fn drop(&mut self) {
|
|
eprintln!("hello drop");
|
|
}
|
|
}
|
|
|
|
thread_local! {
|
|
static TLS: RefCell<Stuff> = RefCell::new(Stuff::new());
|
|
}
|