| // It was once required to use a position-independent executable (PIE) |
| // in order to use the thread_local! macro, or some symbols would contain |
| // a NULL address. This was fixed, and this test checks a non-PIE, then a PIE |
| // build to see if this bug makes a resurgence. |
| // See https://github.com/rust-lang/rust/pull/24448 |
| |
| //@ ignore-cross-compile |
| //@ only-linux |
| |
| use run_make_support::{cc, cwd, run, rustc}; |
| |
| fn main() { |
| rustc().input("foo.rs").run(); |
| cc().input("foo.c") |
| .arg("-lfoo") |
| .library_search_path(cwd()) |
| .arg("-Wl,--gc-sections") |
| .arg("-lpthread") |
| .arg("-ldl") |
| .out_exe("foo") |
| .run(); |
| run("foo"); |
| cc().input("foo.c") |
| .arg("-lfoo") |
| .library_search_path(cwd()) |
| .arg("-Wl,--gc-sections") |
| .arg("-lpthread") |
| .arg("-ldl") |
| .arg("-pie") |
| .arg("-fPIC") |
| .out_exe("foo") |
| .run(); |
| run("foo"); |
| } |