mirror of https://github.com/rust-lang/rust
27 lines
945 B
Rust
27 lines
945 B
Rust
// Test to make sure that reachable extern fns are always available in final
|
|
// productcs, including when link time optimizations (LTO) are used.
|
|
|
|
// In this test, the `foo` crate has a reahable symbol,
|
|
// and is a dependency of the `bar` crate. When the `bar` crate
|
|
// is compiled with LTO, it shouldn't strip the symbol from `foo`, and that's the
|
|
// only way that `foo.c` will successfully compile.
|
|
// See https://github.com/rust-lang/rust/issues/14500
|
|
|
|
//@ ignore-cross-compile
|
|
|
|
use run_make_support::{cc, extra_c_flags, run, rustc, static_lib_name};
|
|
|
|
fn main() {
|
|
let libbar_path = static_lib_name("bar");
|
|
rustc().input("foo.rs").crate_type("rlib").run();
|
|
rustc()
|
|
.input("bar.rs")
|
|
.crate_type("staticlib")
|
|
.arg("-Clto")
|
|
.library_search_path(".")
|
|
.output(&libbar_path)
|
|
.run();
|
|
cc().input("foo.c").input(libbar_path).args(&extra_c_flags()).out_exe("foo").run();
|
|
run("foo");
|
|
}
|