about summary refs log tree commit diff
path: root/src/tools/miri/tests/fail/tls_static_leak.rs
blob: 4d5280336377883f43c17c0ce45c8ddad7b34486 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//@normalize-stderr-test: ".*│.*" -> "$$stripped$$"

#![feature(thread_local)]

use std::cell::Cell;

/// Ensure that leaks through `thread_local` statics *not in the main thread*
/// are detected.
pub fn main() {
    #[thread_local]
    static TLS: Cell<Option<&'static i32>> = Cell::new(None);

    std::thread::spawn(|| {
        TLS.set(Some(Box::leak(Box::new(123)))); //~ERROR: memory leaked
    })
    .join()
    .unwrap();

    // Imagine the program running for a long time while the thread is gone
    // and this memory still sits around, unused -- leaked.
}