From 011727f14ebf66a52f282cd865f5e42d140debe0 Mon Sep 17 00:00:00 2001 From: Oneirical Date: Tue, 23 Jul 2024 13:29:14 -0400 Subject: [PATCH] rewrite redundant-libs to rmake --- .../tidy/src/allowed_run_make_makefiles.txt | 1 - .../raw-dylib-alt-calling-convention/rmake.rs | 8 +++-- tests/run-make/raw-dylib-c/rmake.rs | 2 +- tests/run-make/redundant-libs/Makefile | 24 ------------- tests/run-make/redundant-libs/rmake.rs | 34 +++++++++++++++++++ 5 files changed, 41 insertions(+), 28 deletions(-) delete mode 100644 tests/run-make/redundant-libs/Makefile create mode 100644 tests/run-make/redundant-libs/rmake.rs diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt index 46c8b9aff9506..892f3d62402bb 100644 --- a/src/tools/tidy/src/allowed_run_make_makefiles.txt +++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt @@ -23,7 +23,6 @@ run-make/no-alloc-shim/Makefile run-make/pdb-buildinfo-cl-cmd/Makefile run-make/pgo-gen-lto/Makefile run-make/pgo-indirect-call-promotion/Makefile -run-make/redundant-libs/Makefile run-make/remap-path-prefix-dwarf/Makefile run-make/reproducible-build-2/Makefile run-make/reproducible-build/Makefile diff --git a/tests/run-make/raw-dylib-alt-calling-convention/rmake.rs b/tests/run-make/raw-dylib-alt-calling-convention/rmake.rs index 736b3fee2aef9..1a1622f275421 100644 --- a/tests/run-make/raw-dylib-alt-calling-convention/rmake.rs +++ b/tests/run-make/raw-dylib-alt-calling-convention/rmake.rs @@ -20,9 +20,13 @@ fn main() { rustc().crate_type("bin").input("driver.rs").run(); build_native_dynamic_lib("extern"); let out = run("driver").stdout_utf8(); - diff().expected_file("output.txt").actual_text("actual", out).run(); + diff().expected_file("output.txt").actual_text("actual", out).normalize(r#"\r"#, "").run(); if is_msvc() { let out_msvc = run_with_args("driver", &["true"]).stdout_utf8(); - diff().expected_file("output.msvc.txt").actual_text("actual", out_msvc).run(); + diff() + .expected_file("output.msvc.txt") + .actual_text("actual", out_msvc) + .normalize(r#"\r"#, "") + .run(); } } diff --git a/tests/run-make/raw-dylib-c/rmake.rs b/tests/run-make/raw-dylib-c/rmake.rs index e4e390b2b6482..3cfd8cb400bbf 100644 --- a/tests/run-make/raw-dylib-c/rmake.rs +++ b/tests/run-make/raw-dylib-c/rmake.rs @@ -25,5 +25,5 @@ fn main() { .actual_text("actual", out_driver) .normalize(r#"\r"#, "") .run(); - diff().expected_file("output.txt").actual_text("actual", out_raw).run(); + diff().expected_file("output.txt").actual_text("actual", out_raw).normalize(r#"\r"#, "").run(); } diff --git a/tests/run-make/redundant-libs/Makefile b/tests/run-make/redundant-libs/Makefile deleted file mode 100644 index 0a48b2b280136..0000000000000 --- a/tests/run-make/redundant-libs/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# ignore-cross-compile -include ../tools.mk - -# ignore-windows-msvc - -# rustc will remove one of the two redundant references to foo below. Depending -# on which one gets removed, we'll get a linker error on SOME platforms (like -# Linux). On these platforms, when a library is referenced, the linker will -# only pull in the symbols needed _at that point in time_. If a later library -# depends on additional symbols from the library, they will not have been pulled -# in, and you'll get undefined symbols errors. -# -# So in this example, we need to ensure that rustc keeps the _later_ reference -# to foo, and not the former one. -RUSTC_FLAGS = \ - -l static=bar \ - -l foo \ - -l static=baz \ - -l foo \ - --print link-args - -all: $(call DYLIB,foo) $(call STATICLIB,bar) $(call STATICLIB,baz) - $(RUSTC) $(RUSTC_FLAGS) main.rs - $(call RUN,main) diff --git a/tests/run-make/redundant-libs/rmake.rs b/tests/run-make/redundant-libs/rmake.rs new file mode 100644 index 0000000000000..fb1b3bca8ade3 --- /dev/null +++ b/tests/run-make/redundant-libs/rmake.rs @@ -0,0 +1,34 @@ +// rustc will remove one of the two redundant references to foo below. Depending +// on which one gets removed, we'll get a linker error on SOME platforms (like +// Linux). On these platforms, when a library is referenced, the linker will +// only pull in the symbols needed _at that point in time_. If a later library +// depends on additional symbols from the library, they will not have been pulled +// in, and you'll get undefined symbols errors. +// +// So in this example, we need to ensure that rustc keeps the _later_ reference +// to foo, and not the former one. + +//@ ignore-cross-compile +// Reason: the compiled binary is executed +//@ ignore-windows-msvc +// Reason: this test links libraries via link.exe, which only accepts the import library +// for the dynamic library, i.e. `foo.dll.lib`. However, build_native_dynamic_lib only +// produces `foo.dll` - the dynamic library itself. To make this test work on MSVC, one +// would need to derive the import library from the dynamic library. +// See https://stackoverflow.com/questions/9360280/ + +use run_make_support::{ + build_native_dynamic_lib, build_native_static_lib, cwd, is_msvc, rfs, run, rustc, +}; + +fn main() { + build_native_dynamic_lib("foo"); + build_native_static_lib("bar"); + build_native_static_lib("baz"); + rustc() + .args(&["-lstatic=bar", "-lfoo", "-lstatic=baz", "-lfoo"]) + .input("main.rs") + .print("link-args") + .run(); + run("main"); +}