mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 08:44:35 +00:00
Rollup merge of #127990 - Oneirical:ii-the-high-priestest, r=jieyouxu
Migrate `lto-linkage-used-attr`, `no-duplicate-libs` and `pgo-gen-no-imp-symbols` `run-make` tests to rmake Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). try-job: x86_64-msvc try-job: aarch64-apple try-job: armhf-gnu try-job: test-various try-job: x86_64-gnu-llvm-18
This commit is contained in:
commit
f34237f443
@ -41,18 +41,15 @@ run-make/libtest-thread-limit/Makefile
|
||||
run-make/link-cfg/Makefile
|
||||
run-make/long-linker-command-lines-cmd-exe/Makefile
|
||||
run-make/long-linker-command-lines/Makefile
|
||||
run-make/lto-linkage-used-attr/Makefile
|
||||
run-make/macos-deployment-target/Makefile
|
||||
run-make/min-global-align/Makefile
|
||||
run-make/native-link-modifier-bundle/Makefile
|
||||
run-make/native-link-modifier-whole-archive/Makefile
|
||||
run-make/no-alloc-shim/Makefile
|
||||
run-make/no-builtins-attribute/Makefile
|
||||
run-make/no-duplicate-libs/Makefile
|
||||
run-make/panic-abort-eh_frame/Makefile
|
||||
run-make/pdb-buildinfo-cl-cmd/Makefile
|
||||
run-make/pgo-gen-lto/Makefile
|
||||
run-make/pgo-gen-no-imp-symbols/Makefile
|
||||
run-make/pgo-indirect-call-promotion/Makefile
|
||||
run-make/pointer-auth-link-with-c/Makefile
|
||||
run-make/print-calling-conventions/Makefile
|
||||
|
@ -1,8 +0,0 @@
|
||||
include ../tools.mk
|
||||
|
||||
# Verify that the impl_* symbols are preserved. #108030
|
||||
# only-x86_64-unknown-linux-gnu
|
||||
|
||||
all:
|
||||
$(RUSTC) -Cdebuginfo=0 -Copt-level=3 lib.rs
|
||||
$(RUSTC) -Clto=fat -Cdebuginfo=0 -Copt-level=3 main.rs
|
15
tests/run-make/lto-linkage-used-attr/rmake.rs
Normal file
15
tests/run-make/lto-linkage-used-attr/rmake.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// Link time optimizations (LTO) used to snip away some important symbols
|
||||
// when setting optimization level to 3 or higher.
|
||||
// This is an LLVM, not a rustc bug, fixed here: https://reviews.llvm.org/D145293
|
||||
// This test checks that the impl_* symbols are preserved as they should.
|
||||
// See https://github.com/rust-lang/rust/issues/108030
|
||||
|
||||
//@ only-x86_64-unknown-linux-gnu
|
||||
// Reason: some of the inline assembly directives are architecture-specific.
|
||||
|
||||
use run_make_support::rustc;
|
||||
|
||||
fn main() {
|
||||
rustc().arg("-Cdebuginfo=0").opt_level("3").input("lib.rs").run();
|
||||
rustc().arg("-Clto=fat").arg("-Cdebuginfo=0").opt_level("3").input("main.rs").run();
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
# ignore-cross-compile
|
||||
include ../tools.mk
|
||||
|
||||
ifdef IS_MSVC
|
||||
# FIXME(#27979)
|
||||
all:
|
||||
else
|
||||
all: $(call STATICLIB,foo) $(call STATICLIB,bar)
|
||||
$(RUSTC) main.rs
|
||||
$(call RUN,main)
|
||||
endif
|
22
tests/run-make/no-duplicate-libs/rmake.rs
Normal file
22
tests/run-make/no-duplicate-libs/rmake.rs
Normal file
@ -0,0 +1,22 @@
|
||||
// The rust compiler used to try to detect duplicated libraries in
|
||||
// the linking order and remove the duplicates... but certain edge cases,
|
||||
// such as the one presented in `foo` and `bar` in this test, demand precise
|
||||
// control over the link order, including duplicates. As the anti-duplication
|
||||
// filter was removed, this test should now successfully see main be compiled
|
||||
// and executed.
|
||||
// See https://github.com/rust-lang/rust/pull/12688
|
||||
|
||||
//@ ignore-cross-compile
|
||||
// Reason: the compiled binary is executed
|
||||
|
||||
//@ ignore-msvc
|
||||
// Reason: native compilation results in an unresolved external symbol
|
||||
|
||||
use run_make_support::{build_native_static_lib, run, rustc};
|
||||
|
||||
fn main() {
|
||||
build_native_static_lib("foo");
|
||||
build_native_static_lib("bar");
|
||||
rustc().input("main.rs").run();
|
||||
run("main");
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
include ../tools.mk
|
||||
|
||||
COMPILE_FLAGS=-O -Ccodegen-units=1 -Cprofile-generate="$(TMPDIR)" -Zno-profiler-runtime
|
||||
|
||||
all:
|
||||
$(RUSTC) $(COMPILE_FLAGS) --emit=llvm-ir test.rs
|
||||
# We expect symbols starting with "__llvm_profile_".
|
||||
$(CGREP) "__llvm_profile_" < $(TMPDIR)/test.ll
|
||||
# We do NOT expect the "__imp_" version of these symbols.
|
||||
$(CGREP) -v "__imp___llvm_profile_" < $(TMPDIR)/test.ll # 64 bit
|
||||
$(CGREP) -v "__imp____llvm_profile_" < $(TMPDIR)/test.ll # 32 bit
|
27
tests/run-make/pgo-gen-no-imp-symbols/rmake.rs
Normal file
27
tests/run-make/pgo-gen-no-imp-symbols/rmake.rs
Normal file
@ -0,0 +1,27 @@
|
||||
// LLVM's profiling instrumentation adds a few symbols that are used by the profiler runtime.
|
||||
// Since these show up as globals in the LLVM IR, the compiler generates dllimport-related
|
||||
// __imp_ stubs for them. This can lead to linker errors because the instrumentation
|
||||
// symbols have weak linkage or are in a comdat section, but the __imp_ stubs aren't.
|
||||
// Since profiler-related symbols were excluded from stub-generation in #59812, this has
|
||||
// been fixed, and this test checks that the llvm profile symbol appear, but without the
|
||||
// anomalous __imp_ stubs.
|
||||
// See https://github.com/rust-lang/rust/pull/59812
|
||||
|
||||
use run_make_support::{cwd, rfs, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc()
|
||||
.input("test.rs")
|
||||
.emit("llvm-ir")
|
||||
.opt()
|
||||
.codegen_units(1)
|
||||
.profile_generate(cwd())
|
||||
.arg("-Zno-profiler-runtime")
|
||||
.run();
|
||||
let out = rfs::read_to_string("test.ll");
|
||||
// We expect symbols starting with "__llvm_profile_".
|
||||
assert!(out.contains("__llvm_profile_"));
|
||||
// We do NOT expect the "__imp_" version of these symbols.
|
||||
assert!(!out.contains("__imp___llvm_profile_")); // 64 bit
|
||||
assert!(!out.contains("__imp____llvm_profile_")); // 32 bit
|
||||
}
|
Loading…
Reference in New Issue
Block a user