rust/tests/run-make/apple-slow-tls/rmake.rs
2025-03-18 20:31:52 +02:00

37 lines
1.3 KiB
Rust

//! Test if compilation with has-thread-local=false works, and if the output
//! has indeed no fast TLS variables.
//@ only-apple
use run_make_support::serde_json::{self, Value};
use run_make_support::{cargo, llvm_nm, rfs, rustc};
fn main() {
let output =
rustc().print("target-spec-json").args(["-Z", "unstable-options"]).run().stdout_utf8();
let mut target_json: Value = serde_json::from_str(&output).unwrap();
let has_thread_local = &mut target_json["has-thread-local"];
assert!(matches!(has_thread_local, Value::Bool(true)), "{:?}", has_thread_local);
*has_thread_local = Value::Bool(false);
let out_path = "t.json";
rfs::write(out_path, serde_json::to_string(&target_json).unwrap());
cargo()
.args([
"b",
"--manifest-path",
"tls_test/Cargo.toml",
"--target",
"t.json",
"-Zbuild-std=std,core,panic_abort",
])
.run();
// If a binary has any fast TLS variables, it should also contain the symbols
// __tlv_bootstrap and __tlv_atexit. We don't want them.
let output = llvm_nm().arg("tls_test/target/t/debug/tls_test").run().stdout_utf8();
assert!(!output.contains("_tlv_bootstrap"));
assert!(!output.contains("_tlv_atexit"));
}