//@ needs-target-std // // When a compilation failure deals with seemingly identical types, some helpful // errors should be printed. // The main use case of this error is when there are two crates // (generally different versions of the same crate) with the same name // causing a type mismatch. In this test, one of the crates // is only introduced as an indirect dependency and the type is accessed via a reexport. // See https://github.com/rust-lang/rust/pull/42826 use run_make_support::{rust_lib_name, rustc}; fn main() { rustc().crate_type("rlib").input("crateA.rs").metadata("-1").extra_filename("-1").run(); rustc().crate_type("rlib").input("crateA.rs").metadata("-2").extra_filename("-2").run(); rustc() .crate_type("rlib") .input("crateB.rs") .extern_("crateA", rust_lib_name("crateA-1")) .run(); rustc() .input("crateC.rs") .extern_("crateA", rust_lib_name("crateA-2")) .run_fail() .assert_stderr_contains("mismatched types") .assert_stderr_contains("crateB::try_foo(foo2);") .assert_stderr_contains("different versions of crate `crateA`") .assert_stderr_contains("crateB::try_bar(bar2);") .assert_stderr_contains("expected trait `crateA::bar::Bar`, found trait `Bar`") .assert_stderr_contains("different versions of crate `crateA`"); }