From e9ff47ff406dd6fd029333391bb5ed0be4c9464a Mon Sep 17 00:00:00 2001
From: Oneirical <manchot@videotron.ca>
Date: Fri, 14 Jun 2024 15:50:33 -0400
Subject: [PATCH 1/5] rewrite error-found-staticlib-instead-crate to rmake

---
 src/tools/tidy/src/allowed_run_make_makefiles.txt     |  1 -
 .../error-found-staticlib-instead-crate/Makefile      |  5 -----
 .../error-found-staticlib-instead-crate/rmake.rs      | 11 +++++++++++
 3 files changed, 11 insertions(+), 6 deletions(-)
 delete mode 100644 tests/run-make/error-found-staticlib-instead-crate/Makefile
 create mode 100644 tests/run-make/error-found-staticlib-instead-crate/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 be9df226d64e8..5b2ccbf98d40b 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -38,7 +38,6 @@ run-make/emit-shared-files/Makefile
 run-make/emit-stack-sizes/Makefile
 run-make/emit-to-stdout/Makefile
 run-make/env-dep-info/Makefile
-run-make/error-found-staticlib-instead-crate/Makefile
 run-make/error-writing-dependencies/Makefile
 run-make/export-executable-symbols/Makefile
 run-make/extern-diff-internal-name/Makefile
diff --git a/tests/run-make/error-found-staticlib-instead-crate/Makefile b/tests/run-make/error-found-staticlib-instead-crate/Makefile
deleted file mode 100644
index 0eae41d720ccc..0000000000000
--- a/tests/run-make/error-found-staticlib-instead-crate/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../tools.mk
-
-all:
-	$(RUSTC) foo.rs --crate-type staticlib
-	$(RUSTC) bar.rs 2>&1 | $(CGREP) "found staticlib"
diff --git a/tests/run-make/error-found-staticlib-instead-crate/rmake.rs b/tests/run-make/error-found-staticlib-instead-crate/rmake.rs
new file mode 100644
index 0000000000000..8c707092b7e44
--- /dev/null
+++ b/tests/run-make/error-found-staticlib-instead-crate/rmake.rs
@@ -0,0 +1,11 @@
+// When rustc is looking for a crate but is given a staticlib instead,
+// the error message should be helpful and indicate precisely the cause
+// of the compilation failure.
+// See https://github.com/rust-lang/rust/pull/21978
+
+use run_make_support::rustc;
+
+fn main() {
+    rustc().input("foo.rs").crate_type("staticlib").run();
+    rustc().input("bar.rs").run_fail().assert_stderr_contains("found staticlib");
+}

From e088edd149475f3e11267dd7061db3f3e6962772 Mon Sep 17 00:00:00 2001
From: Oneirical <manchot@videotron.ca>
Date: Fri, 14 Jun 2024 16:01:24 -0400
Subject: [PATCH 2/5] rewrite output-filename-conflicts-with-directory to rmake

---
 src/tools/tidy/src/allowed_run_make_makefiles.txt     |  1 -
 .../output-filename-conflicts-with-directory/Makefile |  7 -------
 .../output-filename-conflicts-with-directory/rmake.rs | 11 +++++++++++
 3 files changed, 11 insertions(+), 8 deletions(-)
 delete mode 100644 tests/run-make/output-filename-conflicts-with-directory/Makefile
 create mode 100644 tests/run-make/output-filename-conflicts-with-directory/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 5b2ccbf98d40b..58e17d24948e2 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -152,7 +152,6 @@ run-make/no-duplicate-libs/Makefile
 run-make/obey-crate-type-flag/Makefile
 run-make/optimization-remarks-dir-pgo/Makefile
 run-make/optimization-remarks-dir/Makefile
-run-make/output-filename-conflicts-with-directory/Makefile
 run-make/output-filename-overwrites-input/Makefile
 run-make/output-type-permutations/Makefile
 run-make/output-with-hyphens/Makefile
diff --git a/tests/run-make/output-filename-conflicts-with-directory/Makefile b/tests/run-make/output-filename-conflicts-with-directory/Makefile
deleted file mode 100644
index 45221356cd97f..0000000000000
--- a/tests/run-make/output-filename-conflicts-with-directory/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-include ../tools.mk
-
-all:
-	cp foo.rs $(TMPDIR)/foo.rs
-	mkdir $(TMPDIR)/foo
-	$(RUSTC) $(TMPDIR)/foo.rs -o $(TMPDIR)/foo 2>&1 \
-		| $(CGREP) -e "the generated executable for the input file \".*foo\.rs\" conflicts with the existing directory \".*foo\""
diff --git a/tests/run-make/output-filename-conflicts-with-directory/rmake.rs b/tests/run-make/output-filename-conflicts-with-directory/rmake.rs
new file mode 100644
index 0000000000000..245bc395f14a3
--- /dev/null
+++ b/tests/run-make/output-filename-conflicts-with-directory/rmake.rs
@@ -0,0 +1,11 @@
+// When the compiled executable would conflict with a directory, a
+// rustc error should be displayed instead of a verbose and
+// potentially-confusing linker error.
+// See https://github.com/rust-lang/rust/pull/47203
+
+use run_make_support::{fs_wrapper, rustc};
+
+fn main() {
+    fs_wrapper::create_dir("foo");
+    rustc().input("foo.rs").output("foo").run_fail().assert_stderr_contains(r#"the generated executable for the input file "foo.rs" conflicts with the existing directory "foo""#);
+}

From 8ece5ce31958bd1acadfc2ac7fccc7ce25176b8d Mon Sep 17 00:00:00 2001
From: Oneirical <manchot@videotron.ca>
Date: Fri, 14 Jun 2024 16:21:55 -0400
Subject: [PATCH 3/5] rewrite output-filename-overwrites-input to rmake

---
 .../tidy/src/allowed_run_make_makefiles.txt   |  1 -
 .../output-filename-overwrites-input/Makefile | 14 -------------
 .../output-filename-overwrites-input/rmake.rs | 21 +++++++++++++++++++
 3 files changed, 21 insertions(+), 15 deletions(-)
 delete mode 100644 tests/run-make/output-filename-overwrites-input/Makefile
 create mode 100644 tests/run-make/output-filename-overwrites-input/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 58e17d24948e2..fb6ea1f3c7a75 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -152,7 +152,6 @@ run-make/no-duplicate-libs/Makefile
 run-make/obey-crate-type-flag/Makefile
 run-make/optimization-remarks-dir-pgo/Makefile
 run-make/optimization-remarks-dir/Makefile
-run-make/output-filename-overwrites-input/Makefile
 run-make/output-type-permutations/Makefile
 run-make/output-with-hyphens/Makefile
 run-make/override-aliased-flags/Makefile
diff --git a/tests/run-make/output-filename-overwrites-input/Makefile b/tests/run-make/output-filename-overwrites-input/Makefile
deleted file mode 100644
index fe5d231382dcd..0000000000000
--- a/tests/run-make/output-filename-overwrites-input/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-all:
-	cp foo.rs $(TMPDIR)/foo
-	$(RUSTC) $(TMPDIR)/foo -o $(TMPDIR)/foo 2>&1 \
-		| $(CGREP) -e "the input file \".*foo\" would be overwritten by the generated executable"
-	cp bar.rs $(TMPDIR)/bar.rlib
-	$(RUSTC) $(TMPDIR)/bar.rlib -o $(TMPDIR)/bar.rlib 2>&1 \
-		| $(CGREP) -e "the input file \".*bar.rlib\" would be overwritten by the generated executable"
-	$(RUSTC) foo.rs 2>&1 && $(RUSTC) -Z ls=root $(TMPDIR)/foo 2>&1
-	cp foo.rs $(TMPDIR)/foo.rs
-	$(RUSTC) $(TMPDIR)/foo.rs -o $(TMPDIR)/foo.rs 2>&1 \
-		| $(CGREP) -e "the input file \".*foo.rs\" would be overwritten by the generated executable"
diff --git a/tests/run-make/output-filename-overwrites-input/rmake.rs b/tests/run-make/output-filename-overwrites-input/rmake.rs
new file mode 100644
index 0000000000000..c6055e818a175
--- /dev/null
+++ b/tests/run-make/output-filename-overwrites-input/rmake.rs
@@ -0,0 +1,21 @@
+// If rustc is invoked on a file that would be overwritten by the
+// compilation, the compilation should fail, to avoid accidental loss.
+// See https://github.com/rust-lang/rust/pull/46814
+
+//@ ignore-cross-compile
+
+use run_make_support::{fs_wrapper, rustc};
+
+fn main() {
+    fs_wrapper::copy("foo.rs", "foo");
+    rustc().input("foo").output("foo").run_fail().assert_stderr_contains(
+        r#"the input file "foo" would be overwritten by the generated executable"#,
+    );
+    fs_wrapper::copy("bar.rs", "bar.rlib");
+    rustc().input("bar.rlib").output("bar.rlib").run_fail().assert_stderr_contains(
+        r#"the input file "bar.rlib" would be overwritten by the generated executable"#,
+    );
+    rustc().input("foo.rs").output("foo.rs").run_fail().assert_stderr_contains(
+        r#"the input file "foo.rs" would be overwritten by the generated executable"#,
+    );
+}

From 5f2b47fcb6aa06985686dc8dc23e33d96e430a12 Mon Sep 17 00:00:00 2001
From: Oneirical <manchot@videotron.ca>
Date: Fri, 14 Jun 2024 16:45:52 -0400
Subject: [PATCH 4/5] rewrite native-link-modifier-verbatim-rustc to rmake

---
 .../tidy/src/allowed_run_make_makefiles.txt   |  1 -
 .../Makefile                                  | 12 -----
 .../rmake.rs                                  | 44 +++++++++++++++++++
 3 files changed, 44 insertions(+), 13 deletions(-)
 delete mode 100644 tests/run-make/native-link-modifier-verbatim-rustc/Makefile
 create mode 100644 tests/run-make/native-link-modifier-verbatim-rustc/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 fb6ea1f3c7a75..9689f2b355fe0 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -143,7 +143,6 @@ run-make/mixing-libs/Makefile
 run-make/msvc-opt-minsize/Makefile
 run-make/native-link-modifier-bundle/Makefile
 run-make/native-link-modifier-verbatim-linker/Makefile
-run-make/native-link-modifier-verbatim-rustc/Makefile
 run-make/native-link-modifier-whole-archive/Makefile
 run-make/no-alloc-shim/Makefile
 run-make/no-builtins-attribute/Makefile
diff --git a/tests/run-make/native-link-modifier-verbatim-rustc/Makefile b/tests/run-make/native-link-modifier-verbatim-rustc/Makefile
deleted file mode 100644
index dfd6ec50fc008..0000000000000
--- a/tests/run-make/native-link-modifier-verbatim-rustc/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-include ../tools.mk
-
-all:
-	# Verbatim allows specify precise name.
-	$(RUSTC) upstream_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/upstream_some_strange_name.ext
-	$(RUSTC) rust_dep.rs -l static:+verbatim=upstream_some_strange_name.ext --crate-type rlib
-
-	# With verbatim any other name cannot be used (upstream).
-	$(RUSTC) upstream_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/libupstream_native_dep.a
-	$(RUSTC) upstream_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/upstream_native_dep.a
-	$(RUSTC) upstream_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/upstream_native_dep.lib
-	$(RUSTC) rust_dep.rs -l static:+verbatim=upstream_native_dep --crate-type rlib 2>&1 | $(CGREP) "upstream_native_dep"
diff --git a/tests/run-make/native-link-modifier-verbatim-rustc/rmake.rs b/tests/run-make/native-link-modifier-verbatim-rustc/rmake.rs
new file mode 100644
index 0000000000000..58c7fef232c7a
--- /dev/null
+++ b/tests/run-make/native-link-modifier-verbatim-rustc/rmake.rs
@@ -0,0 +1,44 @@
+// `verbatim` is a native link modifier that forces rustc to only accept libraries with
+// a specified name. This test checks that this modifier works as intended.
+// See https://github.com/rust-lang/rust/issues/99425
+
+use run_make_support::rustc;
+
+fn main() {
+    // Verbatim allows for the specification of a precise name - in this case, the unconventional ".ext" extension.
+    rustc()
+        .input("upstream_native_dep.rs")
+        .crate_type("staticlib")
+        .output("upstream_some_strange_name.ext")
+        .run();
+    rustc()
+        .input("rust_dep.rs")
+        .crate_type("rlib")
+        .arg("-lstatic:+verbatim=upstream_some_strange_name.ext")
+        .run();
+
+    // This section voluntarily avoids using static_lib_name helpers to be verbatim.
+    // With verbatim, even these common library names are refused - it wants upstream_native_dep without
+    // any file extensions.
+    rustc()
+        .input("upstream_native_dep.rs")
+        .crate_type("staticlib")
+        .output("libupstream_native_dep.a")
+        .run();
+    rustc()
+        .input("upstream_native_dep.rs")
+        .crate_type("staticlib")
+        .output("upstream_native_dep.a")
+        .run();
+    rustc()
+        .input("upstream_native_dep.rs")
+        .crate_type("staticlib")
+        .output("upstream_native_dep.lib")
+        .run();
+    rustc()
+        .input("rust_dep.rs")
+        .crate_type("rlib")
+        .arg("-lstatic:+verbatim=upstream_native_dep")
+        .run_fail()
+        .assert_stderr_contains("upstream_native_dep");
+}

From 6fffe848e3575292ac67d550298a6f169528fd6c Mon Sep 17 00:00:00 2001
From: Oneirical <manchot@videotron.ca>
Date: Fri, 14 Jun 2024 16:54:08 -0400
Subject: [PATCH 5/5] rewrite native-link-modifier-linker to rmake

---
 .../tidy/src/allowed_run_make_makefiles.txt   |  1 -
 .../Makefile                                  | 15 -------
 .../rmake.rs                                  | 41 +++++++++++++++++++
 .../rmake.rs                                  |  7 +++-
 .../rmake.rs                                  |  5 ++-
 5 files changed, 50 insertions(+), 19 deletions(-)
 delete mode 100644 tests/run-make/native-link-modifier-verbatim-linker/Makefile
 create mode 100644 tests/run-make/native-link-modifier-verbatim-linker/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 9689f2b355fe0..2e266cd1a6414 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -142,7 +142,6 @@ run-make/missing-crate-dependency/Makefile
 run-make/mixing-libs/Makefile
 run-make/msvc-opt-minsize/Makefile
 run-make/native-link-modifier-bundle/Makefile
-run-make/native-link-modifier-verbatim-linker/Makefile
 run-make/native-link-modifier-whole-archive/Makefile
 run-make/no-alloc-shim/Makefile
 run-make/no-builtins-attribute/Makefile
diff --git a/tests/run-make/native-link-modifier-verbatim-linker/Makefile b/tests/run-make/native-link-modifier-verbatim-linker/Makefile
deleted file mode 100644
index 47ed2a1429185..0000000000000
--- a/tests/run-make/native-link-modifier-verbatim-linker/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# ignore-cross-compile
-# ignore-apple
-
-include ../tools.mk
-
-all:
-	# Verbatim allows specify precise name.
-	$(RUSTC) local_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/local_some_strange_name.ext
-	$(RUSTC) main.rs -l static:+verbatim=local_some_strange_name.ext
-
-	# With verbatim any other name cannot be used (local).
-	$(RUSTC) local_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/liblocal_native_dep.a
-	$(RUSTC) local_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/local_native_dep.a
-	$(RUSTC) local_native_dep.rs --crate-type=staticlib -o $(TMPDIR)/local_native_dep.lib
-	$(RUSTC) main.rs -l static:+verbatim=local_native_dep 2>&1 | $(CGREP) "local_native_dep"
diff --git a/tests/run-make/native-link-modifier-verbatim-linker/rmake.rs b/tests/run-make/native-link-modifier-verbatim-linker/rmake.rs
new file mode 100644
index 0000000000000..6868cb368ccc3
--- /dev/null
+++ b/tests/run-make/native-link-modifier-verbatim-linker/rmake.rs
@@ -0,0 +1,41 @@
+// `verbatim` is a native link modifier that forces rustc to only accept libraries with
+// a specified name. This test checks that this modifier works as intended.
+// This test is the same as native-link-modifier-rustc, but without rlibs.
+// See https://github.com/rust-lang/rust/issues/99425
+
+//@ ignore-apple
+// Reason: linking fails due to the unusual ".ext" staticlib name.
+
+use run_make_support::rustc;
+
+fn main() {
+    // Verbatim allows for the specification of a precise name
+    // - in this case, the unconventional ".ext" extension.
+    rustc()
+        .input("local_native_dep.rs")
+        .crate_type("staticlib")
+        .output("local_some_strange_name.ext")
+        .run();
+    rustc().input("main.rs").arg("-lstatic:+verbatim=local_some_strange_name.ext").run();
+
+    // This section voluntarily avoids using static_lib_name helpers to be verbatim.
+    // With verbatim, even these common library names are refused
+    // - it wants local_native_dep without
+    // any file extensions.
+    rustc()
+        .input("local_native_dep.rs")
+        .crate_type("staticlib")
+        .output("liblocal_native_dep.a")
+        .run();
+    rustc().input("local_native_dep.rs").crate_type("staticlib").output("local_native_dep.a").run();
+    rustc()
+        .input("local_native_dep.rs")
+        .crate_type("staticlib")
+        .output("local_native_dep.lib")
+        .run();
+    rustc()
+        .input("main.rs")
+        .arg("-lstatic:+verbatim=local_native_dep")
+        .run_fail()
+        .assert_stderr_contains("local_native_dep");
+}
diff --git a/tests/run-make/native-link-modifier-verbatim-rustc/rmake.rs b/tests/run-make/native-link-modifier-verbatim-rustc/rmake.rs
index 58c7fef232c7a..703b8a80ef3ed 100644
--- a/tests/run-make/native-link-modifier-verbatim-rustc/rmake.rs
+++ b/tests/run-make/native-link-modifier-verbatim-rustc/rmake.rs
@@ -1,11 +1,13 @@
 // `verbatim` is a native link modifier that forces rustc to only accept libraries with
 // a specified name. This test checks that this modifier works as intended.
+// This test is the same as native-link-modifier-linker, but with rlibs.
 // See https://github.com/rust-lang/rust/issues/99425
 
 use run_make_support::rustc;
 
 fn main() {
-    // Verbatim allows for the specification of a precise name - in this case, the unconventional ".ext" extension.
+    // Verbatim allows for the specification of a precise name
+    // - in this case, the unconventional ".ext" extension.
     rustc()
         .input("upstream_native_dep.rs")
         .crate_type("staticlib")
@@ -18,7 +20,8 @@ fn main() {
         .run();
 
     // This section voluntarily avoids using static_lib_name helpers to be verbatim.
-    // With verbatim, even these common library names are refused - it wants upstream_native_dep without
+    // With verbatim, even these common library names are refused
+    // - it wants upstream_native_dep without
     // any file extensions.
     rustc()
         .input("upstream_native_dep.rs")
diff --git a/tests/run-make/output-filename-conflicts-with-directory/rmake.rs b/tests/run-make/output-filename-conflicts-with-directory/rmake.rs
index 245bc395f14a3..4b5c9e8d1187d 100644
--- a/tests/run-make/output-filename-conflicts-with-directory/rmake.rs
+++ b/tests/run-make/output-filename-conflicts-with-directory/rmake.rs
@@ -1,3 +1,4 @@
+// ignore-tidy-linelength
 // When the compiled executable would conflict with a directory, a
 // rustc error should be displayed instead of a verbose and
 // potentially-confusing linker error.
@@ -7,5 +8,7 @@ use run_make_support::{fs_wrapper, rustc};
 
 fn main() {
     fs_wrapper::create_dir("foo");
-    rustc().input("foo.rs").output("foo").run_fail().assert_stderr_contains(r#"the generated executable for the input file "foo.rs" conflicts with the existing directory "foo""#);
+    rustc().input("foo.rs").output("foo").run_fail().assert_stderr_contains(
+        r#"the generated executable for the input file "foo.rs" conflicts with the existing directory "foo""#,
+    );
 }