| // 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)); |
| } |