| // This test case creates a situation where the crate loader would run |
| // into an ICE (internal compiler error) when confronted with an invalid setup where it cannot |
| // find the dependency of a direct dependency. |
| // |
| // The test case makes sure that the compiler produces the expected |
| // error message but does not ICE immediately after. |
| // |
| // See https://github.com/rust-lang/rust/issues/83045 |
| |
| //@ only-x86_64 |
| //@ only-linux |
| // Reason: This is a platform-independent issue, no need to waste time testing |
| // everywhere. |
| |
| // NOTE: We use `bare_rustc` below so that the compiler can't find liba.rlib |
| // If we used `rustc` the additional '-L rmake_out' option would allow rustc to |
| // actually find the crate. |
| |
| use run_make_support::{bare_rustc, rust_lib_name, rustc}; |
| |
| fn main() { |
| rustc().crate_name("a").crate_type("rlib").input("a.rs").arg("--verbose").run(); |
| rustc() |
| .crate_name("b") |
| .crate_type("rlib") |
| .extern_("a", rust_lib_name("a")) |
| .input("b.rs") |
| .arg("--verbose") |
| .run(); |
| bare_rustc() |
| .extern_("b", rust_lib_name("b")) |
| .crate_type("rlib") |
| .edition("2018") |
| .input("c.rs") |
| .run_fail() |
| .assert_stderr_contains("E0463") |
| .assert_stderr_not_contains("internal compiler error"); |
| } |