Migrate run-make/codegen-options-parsing to rmake.rs

This commit is contained in:
Guillaume Gomez 2024-06-14 13:50:17 +02:00
parent d2ad293851
commit 267ba9ade2
3 changed files with 56 additions and 35 deletions

View File

@ -12,7 +12,6 @@ run-make/c-unwind-abi-catch-panic/Makefile
run-make/cat-and-grep-sanity-check/Makefile
run-make/cdylib-dylib-linkage/Makefile
run-make/cdylib-fewer-symbols/Makefile
run-make/codegen-options-parsing/Makefile
run-make/comment-section/Makefile
run-make/compiler-lookup-paths-2/Makefile
run-make/compiler-lookup-paths/Makefile

View File

@ -1,34 +0,0 @@
# This test intentionally feeds invalid inputs to codegen and checks if the error message outputs contain specific helpful indications.
# ignore-cross-compile
include ../tools.mk
all:
#Option taking a number
$(RUSTC) -C codegen-units dummy.rs 2>&1 | \
$(CGREP) 'codegen option `codegen-units` requires a number'
$(RUSTC) -C codegen-units= dummy.rs 2>&1 | \
$(CGREP) 'incorrect value `` for codegen option `codegen-units` - a number was expected'
$(RUSTC) -C codegen-units=foo dummy.rs 2>&1 | \
$(CGREP) 'incorrect value `foo` for codegen option `codegen-units` - a number was expected'
$(RUSTC) -C codegen-units=1 dummy.rs
#Option taking a string
$(RUSTC) -C extra-filename dummy.rs 2>&1 | \
$(CGREP) 'codegen option `extra-filename` requires a string'
$(RUSTC) -C extra-filename= dummy.rs 2>&1
$(RUSTC) -C extra-filename=foo dummy.rs 2>&1
#Option taking no argument
$(RUSTC) -C lto= dummy.rs 2>&1 | \
$(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted'
$(RUSTC) -C lto=1 dummy.rs 2>&1 | \
$(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted'
$(RUSTC) -C lto=foo dummy.rs 2>&1 | \
$(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted'
$(RUSTC) -C lto dummy.rs
# Should not link dead code...
$(RUSTC) --print link-args dummy.rs 2>&1 | \
$(CGREP) -e '--gc-sections|-z[^ ]* [^ ]*<ignore>|-dead_strip|/OPT:REF'
# ... unless you specifically ask to keep it
$(RUSTC) --print link-args -C link-dead-code dummy.rs 2>&1 | \
$(CGREP) -ve '--gc-sections|-z[^ ]* [^ ]*<ignore>|-dead_strip|/OPT:REF'

View File

@ -0,0 +1,56 @@
// This test intentionally feeds invalid inputs to codegen and checks if the error message outputs
// contain specific helpful indications.
//@ ignore-cross-compile
use run_make_support::regex::Regex;
use run_make_support::rustc;
fn main() {
// Option taking a number.
rustc()
.input("dummy.rs")
.arg("-Ccodegen-units")
.run_fail()
.assert_stderr_contains("codegen option `codegen-units` requires a number");
rustc().input("dummy.rs").arg("-Ccodegen-units=").run_fail().assert_stderr_contains(
"incorrect value `` for codegen option `codegen-units` - a number was expected",
);
rustc().input("dummy.rs").arg("-Ccodegen-units=foo").run_fail().assert_stderr_contains(
"incorrect value `foo` for codegen option `codegen-units` - a number was expected",
);
rustc().input("dummy.rs").arg("-Ccodegen-units=1").run();
// Option taking a string.
rustc()
.input("dummy.rs")
.arg("-Cextra-filename")
.run_fail()
.assert_stderr_contains("codegen option `extra-filename` requires a string");
rustc().input("dummy.rs").arg("-Cextra-filename=").run();
rustc().input("dummy.rs").arg("-Cextra-filename=foo").run();
// Option taking no argument.
rustc().input("dummy.rs").arg("-Clto=").run_fail().assert_stderr_contains(
"codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, \
`fat`, or omitted",
);
rustc().input("dummy.rs").arg("-Clto=1").run_fail().assert_stderr_contains(
"codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, \
`fat`, or omitted",
);
rustc().input("dummy.rs").arg("-Clto=foo").run_fail().assert_stderr_contains(
"codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, \
`fat`, or omitted",
);
rustc().input("dummy.rs").arg("-Clto").run();
let regex = Regex::new("--gc-sections|-z[^ ]* [^ ]*<ignore>|-dead_strip|/OPT:REF").unwrap();
// Should not link dead code...
let stdout = rustc().input("dummy.rs").print("link-args").run().stdout_utf8();
assert!(regex.is_match(&stdout));
// ... unless you specifically ask to keep it
let stdout =
rustc().input("dummy.rs").print("link-args").arg("-Clink-dead-code").run().stdout_utf8();
assert!(!regex.is_match(&stdout));
}