Rollup merge of #125047 - Oneirical:test5, r=jieyouxu
Migrate `run-make/issue-14500` to new `rmake.rs` format Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). Note: I find suspicious that `libbar.a` is hardcoded and is not using the `STATICLIB` call to adapt to Windows platforms. Is this intentional? If not, this will need to be changed.
This commit is contained in:
commit
844c7e826e
@ -150,6 +150,19 @@ impl Rustc {
|
||||
self
|
||||
}
|
||||
|
||||
/// Enables link time optimizations in rustc. Equivalent to `-Clto``.
|
||||
pub fn lto(&mut self) -> &mut Self {
|
||||
self.cmd.arg("-Clto");
|
||||
self
|
||||
}
|
||||
|
||||
/// Add a directory to the library search path.
|
||||
pub fn library_search_path<P: AsRef<Path>>(&mut self, path: P) -> &mut Self {
|
||||
self.cmd.arg("-L");
|
||||
self.cmd.arg(path.as_ref());
|
||||
self
|
||||
}
|
||||
|
||||
/// Specify the edition year.
|
||||
pub fn edition(&mut self, edition: &str) -> &mut Self {
|
||||
self.cmd.arg("--edition");
|
||||
|
@ -95,7 +95,6 @@ run-make/issue-107094/Makefile
|
||||
run-make/issue-10971-temps-dir/Makefile
|
||||
run-make/issue-109934-lto-debuginfo/Makefile
|
||||
run-make/issue-11908/Makefile
|
||||
run-make/issue-14500/Makefile
|
||||
run-make/issue-14698/Makefile
|
||||
run-make/issue-15460/Makefile
|
||||
run-make/issue-18943/Makefile
|
||||
|
@ -1,15 +0,0 @@
|
||||
include ../tools.mk
|
||||
|
||||
# ignore-cross-compile
|
||||
|
||||
# Test to make sure that reachable extern fns are always available in final
|
||||
# productcs, including when LTO is 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.
|
||||
|
||||
all:
|
||||
$(RUSTC) foo.rs --crate-type=rlib
|
||||
$(RUSTC) bar.rs --crate-type=staticlib -C lto -L. -o $(TMPDIR)/libbar.a
|
||||
$(CC) foo.c $(TMPDIR)/libbar.a $(EXTRACFLAGS) $(call OUT_EXE,foo)
|
||||
$(call RUN,foo)
|
26
tests/run-make/reachable-extern-fn-available-lto/rmake.rs
Normal file
26
tests/run-make/reachable-extern-fn-available-lto/rmake.rs
Normal file
@ -0,0 +1,26 @@
|
||||
// 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, tmp_dir};
|
||||
|
||||
fn main() {
|
||||
let libbar_path = static_lib("bar");
|
||||
rustc().input("foo.rs").crate_type("rlib").run();
|
||||
rustc()
|
||||
.input("bar.rs")
|
||||
.crate_type("staticlib")
|
||||
.lto()
|
||||
.library_search_path(".")
|
||||
.output(&libbar_path)
|
||||
.run();
|
||||
cc().input("foo.c").input(libbar_path).args(&extra_c_flags()).out_exe("foo").run();
|
||||
run("foo");
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user