mirror of https://github.com/rust-lang/rust.git
rewrite type-mismatch-same-crate-name to rmake
This commit is contained in:
parent
37599b2072
commit
80fb4cab4e
|
@ -142,6 +142,5 @@ run-make/test-benches/Makefile
|
||||||
run-make/thumb-none-cortex-m/Makefile
|
run-make/thumb-none-cortex-m/Makefile
|
||||||
run-make/thumb-none-qemu/Makefile
|
run-make/thumb-none-qemu/Makefile
|
||||||
run-make/translation/Makefile
|
run-make/translation/Makefile
|
||||||
run-make/type-mismatch-same-crate-name/Makefile
|
|
||||||
run-make/unstable-flag-required/Makefile
|
run-make/unstable-flag-required/Makefile
|
||||||
run-make/x86_64-fortanix-unknown-sgx-lvi/Makefile
|
run-make/x86_64-fortanix-unknown-sgx-lvi/Makefile
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
include ../tools.mk
|
|
||||||
|
|
||||||
all:
|
|
||||||
# compile two different versions of crateA
|
|
||||||
$(RUSTC) --crate-type=rlib crateA.rs -C metadata=-1 -C extra-filename=-1
|
|
||||||
$(RUSTC) --crate-type=rlib crateA.rs -C metadata=-2 -C extra-filename=-2
|
|
||||||
# make crateB depend on version 1 of crateA
|
|
||||||
$(RUSTC) --crate-type=rlib crateB.rs --extern crateA=$(TMPDIR)/libcrateA-1.rlib
|
|
||||||
# make crateC depend on version 2 of crateA
|
|
||||||
$(RUSTC) crateC.rs --extern crateA=$(TMPDIR)/libcrateA-2.rlib 2>&1 | \
|
|
||||||
tr -d '\r\n' | $(CGREP) -e \
|
|
||||||
"mismatched types.*\
|
|
||||||
crateB::try_foo\(foo2\);.*\
|
|
||||||
expected \`crateA::foo::Foo\`, found \`Foo\`.*\
|
|
||||||
different versions of crate \`crateA\`.*\
|
|
||||||
mismatched types.*\
|
|
||||||
crateB::try_bar\(bar2\);.*\
|
|
||||||
expected trait \`crateA::bar::Bar\`, found trait \`Bar\`.*\
|
|
||||||
different versions of crate \`crateA\`"
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
// 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`");
|
||||||
|
}
|
Loading…
Reference in New Issue