// is not met but the struct implements a trait with the same path.
fn main() {
- let foo2 = {
+ let foo = {
extern crate crate_a2 as a;
a::Foo
};
+ let implements_no_traits = {
+ extern crate crate_a2 as a;
+ a::DoesNotImplementTrait
+ };
+
+ let other_variant_implements_mismatched_trait = {
+ extern crate crate_a2 as a;
+ a::ImplementsWrongTraitConditionally { _marker: std::marker::PhantomData::<isize> }
+ };
+
+ let other_variant_implements_correct_trait = {
+ extern crate crate_a1 as a;
+ a::ImplementsTraitForUsize { _marker: std::marker::PhantomData::<isize> }
+ };
+
{
extern crate crate_a1 as a;
- a::try_foo(foo2);
+ a::try_foo(foo);
//~^ ERROR E0277
- //~| Trait impl with same name found
+ //~| trait impl with same name found
//~| Perhaps two different versions of crate `crate_a2`
+
+ // We don't want to see the "version mismatch" help message here
+ // because `implements_no_traits` has no impl for `Foo`
+ a::try_foo(implements_no_traits);
+ //~^ ERROR E0277
+
+ // We don't want to see the "version mismatch" help message here
+ // because `other_variant_implements_mismatched_trait`
+ // does not have an impl for its `<isize>` variant,
+ // only for its `<usize>` variant.
+ a::try_foo(other_variant_implements_mismatched_trait);
+ //~^ ERROR E0277
+
+ // We don't want to see the "version mismatch" help message here
+ // because `ImplementsTraitForUsize` only has
+ // impls for the correct trait where the path is not misleading.
+ a::try_foo(other_variant_implements_correct_trait);
+ //~^ ERROR E0277
+ //~| the following implementations were found:
}
}
error[E0277]: the trait bound `main::a::Foo: main::a::Bar` is not satisfied
- --> $DIR/trait-bounds-same-crate-name.rs:16:20
+ --> $DIR/trait-bounds-same-crate-name.rs:31:20
|
-LL | a::try_foo(foo2);
- | ^^^^ the trait `main::a::Bar` is not implemented for `main::a::Foo`
+LL | a::try_foo(foo);
+ | ^^^ the trait `main::a::Bar` is not implemented for `main::a::Foo`
|
- ::: $DIR/auxiliary/crate_a1.rs:5:24
+ ::: $DIR/auxiliary/crate_a1.rs:3:24
|
-LL | pub fn try_foo(x: impl Bar){}
+LL | pub fn try_foo(x: impl Bar) {}
| --- required by this bound in `main::a::try_foo`
|
-help: Trait impl with same name found
+help: trait impl with same name found
--> $DIR/auxiliary/crate_a2.rs:5:1
|
LL | impl Bar for Foo {}
| ^^^^^^^^^^^^^^^^^^^
= note: Perhaps two different versions of crate `crate_a2` are being used?
-error: aborting due to previous error
+error[E0277]: the trait bound `main::a::DoesNotImplementTrait: main::a::Bar` is not satisfied
+ --> $DIR/trait-bounds-same-crate-name.rs:38:20
+ |
+LL | a::try_foo(implements_no_traits);
+ | ^^^^^^^^^^^^^^^^^^^^ the trait `main::a::Bar` is not implemented for `main::a::DoesNotImplementTrait`
+ |
+ ::: $DIR/auxiliary/crate_a1.rs:3:24
+ |
+LL | pub fn try_foo(x: impl Bar) {}
+ | --- required by this bound in `main::a::try_foo`
+
+error[E0277]: the trait bound `main::a::ImplementsWrongTraitConditionally<isize>: main::a::Bar` is not satisfied
+ --> $DIR/trait-bounds-same-crate-name.rs:45:20
+ |
+LL | a::try_foo(other_variant_implements_mismatched_trait);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `main::a::Bar` is not implemented for `main::a::ImplementsWrongTraitConditionally<isize>`
+ |
+ ::: $DIR/auxiliary/crate_a1.rs:3:24
+ |
+LL | pub fn try_foo(x: impl Bar) {}
+ | --- required by this bound in `main::a::try_foo`
+ |
+help: trait impl with same name found
+ --> $DIR/auxiliary/crate_a2.rs:13:1
+ |
+LL | impl Bar for ImplementsWrongTraitConditionally<isize> {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = note: Perhaps two different versions of crate `crate_a2` are being used?
+
+error[E0277]: the trait bound `main::a::ImplementsTraitForUsize<isize>: main::a::Bar` is not satisfied
+ --> $DIR/trait-bounds-same-crate-name.rs:51:20
+ |
+LL | a::try_foo(other_variant_implements_correct_trait);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `main::a::Bar` is not implemented for `main::a::ImplementsTraitForUsize<isize>`
+ |
+ ::: $DIR/auxiliary/crate_a1.rs:3:24
+ |
+LL | pub fn try_foo(x: impl Bar) {}
+ | --- required by this bound in `main::a::try_foo`
+ |
+ = help: the following implementations were found:
+ <main::a::ImplementsTraitForUsize<usize> as main::a::Bar>
+
+error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0277`.