parent
21c75ad1cc
commit
2fb0b160c0
2 changed files with 41 additions and 13 deletions
|
@ -0,0 +1,29 @@
|
|||
error[E0277]: the trait bound `foo::Struct: Trait` is not satisfied because the trait comes from a different crate version
|
||||
--> foo-current.rs:13:19
|
||||
|
|
||||
13 | check_trait::<foo::Struct>();
|
||||
| ^^^^^^^^^^^ the trait `Trait` is not implemented for `foo::Struct`
|
||||
|
|
||||
note: there are multiple different versions of crate `foo` in the dependency graph
|
||||
--> foo-current.rs:7:1
|
||||
|
|
||||
4 | extern crate foo;
|
||||
| ----------------- one version of crate `foo` is used here, as a direct dependency of the current crate
|
||||
5 |
|
||||
6 | pub struct Struct;
|
||||
| ----------------- this type implements the required trait
|
||||
7 | pub trait Trait {}
|
||||
| ^^^^^^^^^^^^^^^ this is the required trait
|
||||
|
|
||||
::: foo-prev.rs:X:Y
|
||||
|
|
||||
4 | pub struct Struct;
|
||||
| ----------------- this type doesn't implement the required trait
|
||||
5 | pub trait Trait {}
|
||||
| --------------- this is the found trait
|
||||
= note: two types coming from two different versions of the same crate are different types even if they look the same
|
||||
= help: you can use `cargo tree` to explore your dependency tree
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
|
@ -7,26 +7,25 @@
|
|||
// and traits of the different versions are mixed, we produce diagnostic output and not an ICE.
|
||||
// #133563
|
||||
|
||||
use run_make_support::{rust_lib_name, rustc};
|
||||
use run_make_support::{diff, rust_lib_name, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc().input("foo-prev.rs").run();
|
||||
|
||||
rustc()
|
||||
let out = rustc()
|
||||
.extra_filename("current")
|
||||
.metadata("current")
|
||||
.input("foo-current.rs")
|
||||
.extern_("foo", rust_lib_name("foo"))
|
||||
.run_fail()
|
||||
.assert_stderr_contains(r#"
|
||||
note: there are multiple different versions of crate `foo` in the dependency graph
|
||||
--> foo-current.rs:7:1
|
||||
|
|
||||
4 | extern crate foo;
|
||||
| ----------------- one version of crate `foo` is used here, as a direct dependency of the current crate
|
||||
5 |
|
||||
6 | pub struct Struct;
|
||||
| ----------------- this type implements the required trait
|
||||
7 | pub trait Trait {}
|
||||
| ^^^^^^^^^^^^^^^ this is the required trait"#);
|
||||
.stderr_utf8();
|
||||
|
||||
// We don't remap the path of the `foo-prev` crate, so we remap it here.
|
||||
let mut lines: Vec<_> = out.lines().collect();
|
||||
for line in &mut lines {
|
||||
if line.starts_with(" ::: ") {
|
||||
*line = " ::: foo-prev.rs:X:Y";
|
||||
}
|
||||
}
|
||||
diff().expected_file("foo.stderr").actual_text("(rustc)", &lines.join("\n")).run();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue