diff options
| author | bors <bors@rust-lang.org> | 2021-01-26 11:15:44 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-01-26 11:15:44 +0000 |
| commit | 1483e67addd37d9bd20ba3b4613b678ee9ad4d68 (patch) | |
| tree | d44b005ba8225aee4d93b8baab63f8375c16b7f7 /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | |
| parent | a8f707553276a15565860af3d415aae18428aa96 (diff) | |
| parent | b05788e859d3d553825eb114f07573f4839286b1 (diff) | |
| download | rust-1483e67addd37d9bd20ba3b4613b678ee9ad4d68.tar.gz rust-1483e67addd37d9bd20ba3b4613b678ee9ad4d68.zip | |
Auto merge of #81367 - andersk:join-test-threads, r=dtolnay
libtest: Wait for test threads to exit after they report completion
Otherwise we can miss bugs where a test reports that it succeeded but then panics within a TLS destructor.
Example:
```rust
use std::thread::sleep;
use std::time::Duration;
struct Foo;
impl Drop for Foo {
fn drop(&mut self) {
sleep(Duration::from_secs(1));
panic!()
}
}
thread_local!(static FOO: Foo = Foo);
#[test]
pub fn test() {
FOO.with(|_| {});
}
```
Before this fix, `cargo test` incorrectly reports success.
```console
$ cargo test
Finished test [unoptimized + debuginfo] target(s) in 0.01s
Running target/debug/deps/panicking_test-85130fa46b54f758
running 1 test
test test ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
$ echo $?
0
```
After this fix, the failure is visible. (The entire process is aborted due to #24479.)
```console
$ cargo test
Finished test [unoptimized + debuginfo] target(s) in 0.01s
Running target/debug/deps/panicking_test-76180625bc2ee3c9
running 1 test
thread 'test' panicked at 'explicit panic', src/main.rs:9:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
fatal runtime error: failed to initiate panic, error 5
error: test failed, to rerun pass '--bin panicking-test'
Caused by:
process didn't exit successfully: `/tmp/panicking-test/target/debug/deps/panicking_test-76180625bc2ee3c9 --nocapture` (signal: 6, SIGABRT: process abort signal)
$ echo $?
101
```
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
