| //@ needs-target-std |
| // |
| // Non-regression test for issue #132920 where multiple versions of the same crate are present in |
| // the dependency graph, and an unexpected error in a dependent crate caused an ICE in the |
| // unsatisfied bounds diagnostics for traits present in multiple crate versions. |
| // |
| // Setup: |
| // - two versions of the same crate: minibevy_a and minibevy_b |
| // - minirapier: depends on minibevy_a |
| // - repro: depends on minirapier and minibevy_b |
| |
| use run_make_support::rustc; |
| |
| fn main() { |
| // Prepare dependencies, mimicking a check build with cargo. |
| rustc() |
| .input("minibevy.rs") |
| .crate_name("minibevy") |
| .crate_type("lib") |
| .emit("metadata") |
| .metadata("a") |
| .extra_filename("-a") |
| .run(); |
| rustc() |
| .input("minibevy.rs") |
| .crate_name("minibevy") |
| .crate_type("lib") |
| .emit("metadata") |
| .metadata("b") |
| .extra_filename("-b") |
| .run(); |
| rustc() |
| .input("minirapier.rs") |
| .crate_name("minirapier") |
| .crate_type("lib") |
| .emit("metadata") |
| .extern_("minibevy", "libminibevy-a.rmeta") |
| .run(); |
| |
| // Building the main crate used to ICE here when printing the `type annotations needed` error. |
| rustc() |
| .input("repro.rs") |
| .extern_("minibevy", "libminibevy-b.rmeta") |
| .extern_("minirapier", "libminirapier.rmeta") |
| .run_fail() |
| .assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug"); |
| } |