Skip to content

Commit

Permalink
rewrite prune-link-args as a ui test
Browse files Browse the repository at this point in the history
  • Loading branch information
Oneirical committed Jun 11, 2024
1 parent 2450aeb commit 16c0be8
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 77 deletions.
1 change: 0 additions & 1 deletion src/tools/tidy/src/allowed_run_make_makefiles.txt
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,6 @@ run-make/pretty-print-with-dep-file/Makefile
run-make/print-calling-conventions/Makefile
run-make/print-target-list/Makefile
run-make/profile/Makefile
run-make/prune-link-args/Makefile
run-make/raw-dylib-alt-calling-convention/Makefile
run-make/raw-dylib-c/Makefile
run-make/raw-dylib-cross-compilation/Makefile
Expand Down
102 changes: 39 additions & 63 deletions tests/run-make/compiler-lookup-paths/rmake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,99 +5,75 @@
// fail to be used by the compiler.
// See https://github.com/rust-lang/rust/pull/19941

use run_make_support::fs_wrapper;
use run_make_support::{rmake_out_path, rustc};
use run_make_support::{fs_wrapper, rustc};

fn main() {
assert!(rmake_out_path("libnative.a").exists());
fs_wrapper::create_dir_all(rmake_out_path("crate"));
fs_wrapper::create_dir_all(rmake_out_path("native"));
fs_wrapper::rename(rmake_out_path("libnative.a"), rmake_out_path("native"));
assert!("libnative.a".exists());
fs_wrapper::create_dir_all("crate");
fs_wrapper::create_dir_all("native");
fs_wrapper::rename("libnative.a", "native/libnative.a");
rustc().input("a.rs").run();
fs_wrapper::rename(rmake_out_path("liba.a"), rmake_out_path("crate"));
rustc()
.input("b.rs")
.specific_library_search_path("native", rmake_out_path("crate"))
.run_fail();
rustc()
.input("b.rs")
.specific_library_search_path("dependency", rmake_out_path("crate"))
.run_fail();
rustc().input("b.rs").specific_library_search_path("crate", rmake_out_path("crate")).run();
rustc().input("b.rs").specific_library_search_path("all", rmake_out_path("crate")).run();
fs_wrapper::rename("liba.a", "crate/liba.a");
rustc().input("b.rs").specific_library_search_path("native", "crate").run_fail();
rustc().input("b.rs").specific_library_search_path("dependency", "crate").run_fail();
rustc().input("b.rs").specific_library_search_path("crate", "crate").run();
rustc().input("b.rs").specific_library_search_path("all", "crate").run();

rustc()
.input("c.rs")
.specific_library_search_path("native", rmake_out_path("crate"))
.run_fail();
rustc().input("c.rs").specific_library_search_path("crate", rmake_out_path("crate")).run_fail();
rustc().input("c.rs").specific_library_search_path("dependency", rmake_out_path("crate")).run();
rustc().input("c.rs").specific_library_search_path("all", rmake_out_path("crate")).run();
rustc().input("c.rs").specific_library_search_path("native", "crate").run_fail();
rustc().input("c.rs").specific_library_search_path("crate", "crate").run_fail();
rustc().input("c.rs").specific_library_search_path("dependency", "crate").run();
rustc().input("c.rs").specific_library_search_path("all", "crate").run();

rustc()
.input("d.rs")
.specific_library_search_path("dependency", rmake_out_path("native"))
.run_fail();
rustc()
.input("d.rs")
.specific_library_search_path("crate", rmake_out_path("native"))
.run_fail();
rustc().input("d.rs").specific_library_search_path("native", rmake_out_path("native")).run();
rustc().input("d.rs").specific_library_search_path("all", rmake_out_path("native")).run();
rustc().input("d.rs").specific_library_search_path("dependency", "native").run_fail();
rustc().input("d.rs").specific_library_search_path("crate", "native").run_fail();
rustc().input("d.rs").specific_library_search_path("native", "native").run();
rustc().input("d.rs").specific_library_search_path("all", "native").run();

// Deduplication tests.
fs_wrapper::create_dir_all(rmake_out_path("e1"));
fs_wrapper::create_dir_all(rmake_out_path("e2"));
fs_wrapper::create_dir_all("e1");
fs_wrapper::create_dir_all("e2");

rustc().input("e.rs").output(rmake_out_path("e1/libe.rlib")).run();
rustc().input("e.rs").output(rmake_out_path("e2/libe.rlib")).run();
rustc().input("e.rs").output("e1/libe.rlib").run();
rustc().input("e.rs").output("e2/libe.rlib").run();
// If the library hash is correct, compilation should succeed.
rustc().input("f.rs").library_search_path("e1").library_search_path("e2").run();
rustc()
.input("f.rs")
.library_search_path(rmake_out_path("e1"))
.library_search_path(rmake_out_path("e2"))
.run();
rustc()
.input("f.rs")
.specific_library_search_path("crate", rmake_out_path("e1"))
.library_search_path(rmake_out_path("e2"))
.specific_library_search_path("crate", "e1")
.library_search_path("e2")
.run();
rustc()
.input("f.rs")
.specific_library_search_path("crate", rmake_out_path("e1"))
.specific_library_search_path("crate", rmake_out_path("e2"))
.specific_library_search_path("crate", "e1")
.specific_library_search_path("crate", "e2")
.run();
// If the library has a different hash, errors should occur.
rustc().input("e2.rs").output(rmake_out_path("e2/libe.rlib")).run();
rustc()
.input("f.rs")
.library_search_path(rmake_out_path("e1"))
.library_search_path(rmake_out_path("e2"))
.run_fail();
rustc().input("e2.rs").output("e2/libe.rlib").run();
rustc().input("f.rs").library_search_path("e1").library_search_path("e2").run_fail();
rustc()
.input("f.rs")
.specific_library_search_path("crate", rmake_out_path("e1"))
.library_search_path(rmake_out_path("e2"))
.specific_library_search_path("crate", "e1")
.library_search_path("e2")
.run_fail();
rustc()
.input("f.rs")
.specific_library_search_path("crate", rmake_out_path("e1"))
.specific_library_search_path("crate", rmake_out_path("e2"))
.specific_library_search_path("crate", "e1")
.specific_library_search_path("crate", "e2")
.run_fail();
// Native and dependency paths do not cause errors.
rustc()
.input("f.rs")
.specific_library_search_path("native", rmake_out_path("e1"))
.library_search_path(rmake_out_path("e2"))
.specific_library_search_path("native", "e1")
.library_search_path("e2")
.run();
rustc()
.input("f.rs")
.specific_library_search_path("dependency", rmake_out_path("e1"))
.library_search_path(rmake_out_path("e2"))
.specific_library_search_path("dependency", "e1")
.library_search_path("e2")
.run();
rustc()
.input("f.rs")
.specific_library_search_path("dependency", rmake_out_path("e1"))
.specific_library_search_path("crate", rmake_out_path("e2"))
.specific_library_search_path("dependency", "e1")
.specific_library_search_path("crate", "e2")
.run();
}
9 changes: 7 additions & 2 deletions tests/run-make/dump-mono-stats/rmake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
use run_make_support::{cwd, fs_wrapper, rustc};

fn main() {
rustc().crate_type("lib").input("foo.rs").dump_mono_stats(cwd()).arg("-Zdump-mono-stats-format=json").run();
assert!(fs_wrapper::read_to_string("foo.mono_items.json").contains("\"name\":\"bar\"");
rustc()
.crate_type("lib")
.input("foo.rs")
.dump_mono_stats(cwd())
.arg("-Zdump-mono-stats-format=json")
.run();
assert!(fs_wrapper::read_to_string("foo.mono_items.json").contains(r#""name":"bar""#));
}
10 changes: 0 additions & 10 deletions tests/run-make/prune-link-args/Makefile

This file was deleted.

1 change: 0 additions & 1 deletion tests/run-make/prune-link-args/empty.rs

This file was deleted.

14 changes: 14 additions & 0 deletions tests/ui/invalid-compile-flags/prune-link-args.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Passing link-args with an unexpected space
// could result in the flag being parsed and receiving
// an unexpected, empty linker argument. This test
// ensures successful compilation even when a space is
// present.
// See https://github.com/rust-lang/rust/pull/10749

//@ check-pass
//@ ignore-cross-compile

//@ compile-flags: -C link-args=\"lc \"
// Notice the space at the end, which emulates the output of pkg-config

fn main() {}

0 comments on commit 16c0be8

Please sign in to comment.