37 lines
1.3 KiB
Rust
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"));
|
|
}
|