diff options
| author | Michael Woerister <michaelwoerister@posteo> | 2018-08-03 17:09:50 +0200 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo> | 2018-08-07 14:44:48 +0200 |
| commit | 3742f4d9f6eaf7b4b7a8aa246ee3dc2fdb2b80c3 (patch) | |
| tree | e00fa984b73a4bda08bfd073e073506e34d02eb9 | |
| parent | 386e000c5f28dfac697ae145524bcc1c17759993 (diff) | |
| download | rust-3742f4d9f6eaf7b4b7a8aa246ee3dc2fdb2b80c3.tar.gz rust-3742f4d9f6eaf7b4b7a8aa246ee3dc2fdb2b80c3.zip | |
Add test case for including upstream object files in staticlibs when doing cross-lang LTO.
3 files changed, 54 insertions, 0 deletions
diff --git a/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/Makefile b/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/Makefile new file mode 100644 index 00000000000..de42c6e0eb5 --- /dev/null +++ b/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/Makefile @@ -0,0 +1,23 @@ + +-include ../tools.mk + +# This test makes sure that we don't loose upstream object files when compiling +# staticlibs with -Zcross-lang-lto + +all: staticlib.rs upstream.rs + $(RUSTC) upstream.rs -Z cross-lang-lto -Ccodegen-units=1 + + # Check No LTO + $(RUSTC) staticlib.rs -Z cross-lang-lto -Ccodegen-units=1 -L. -o $(TMPDIR)/staticlib.a + (cd $(TMPDIR); llvm-ar x ./staticlib.a) + # Make sure the upstream object file was included + ls upstream.*.rcgu.o + + # Cleanup + rm $(TMPDIR)/* + + # Check ThinLTO + $(RUSTC) upstream.rs -Z cross-lang-lto -Ccodegen-units=1 -Clto=thin + $(RUSTC) staticlib.rs -Z cross-lang-lto -Ccodegen-units=1 -Clto=thin -L. -o $(TMPDIR)/staticlib.a + (cd $(TMPDIR); llvm-ar x ./staticlib.a) + ls upstream.*.rcgu.o diff --git a/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/staticlib.rs b/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/staticlib.rs new file mode 100644 index 00000000000..b370b7b859d --- /dev/null +++ b/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/staticlib.rs @@ -0,0 +1,18 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type="staticlib"] + +extern crate upstream; + +#[no_mangle] +pub extern fn bar() { + upstream::foo(); +} diff --git a/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/upstream.rs b/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/upstream.rs new file mode 100644 index 00000000000..a79b9bf08fc --- /dev/null +++ b/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs/upstream.rs @@ -0,0 +1,13 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_type = "rlib"] + +pub fn foo() {} |
