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