diff options
Diffstat (limited to 'tests/ui/missing-trait-bounds')
12 files changed, 206 insertions, 0 deletions
diff --git a/tests/ui/missing-trait-bounds/auxiliary/issue-69725.rs b/tests/ui/missing-trait-bounds/auxiliary/issue-69725.rs new file mode 100644 index 000000000..13606e498 --- /dev/null +++ b/tests/ui/missing-trait-bounds/auxiliary/issue-69725.rs @@ -0,0 +1,8 @@ +#[derive(Clone)] +pub struct Struct<A>(A); + +impl<A> Struct<A> { + pub fn new() -> Self { + todo!() + } +} diff --git a/tests/ui/missing-trait-bounds/issue-35677.fixed b/tests/ui/missing-trait-bounds/issue-35677.fixed new file mode 100644 index 000000000..08174d8d8 --- /dev/null +++ b/tests/ui/missing-trait-bounds/issue-35677.fixed @@ -0,0 +1,11 @@ +// run-rustfix +#![allow(dead_code)] +use std::collections::HashSet; +use std::hash::Hash; + +fn is_subset<T>(this: &HashSet<T>, other: &HashSet<T>) -> bool where T: Eq, T: Hash { + this.is_subset(other) + //~^ ERROR the method +} + +fn main() {} diff --git a/tests/ui/missing-trait-bounds/issue-35677.rs b/tests/ui/missing-trait-bounds/issue-35677.rs new file mode 100644 index 000000000..2cb394386 --- /dev/null +++ b/tests/ui/missing-trait-bounds/issue-35677.rs @@ -0,0 +1,11 @@ +// run-rustfix +#![allow(dead_code)] +use std::collections::HashSet; +use std::hash::Hash; + +fn is_subset<T>(this: &HashSet<T>, other: &HashSet<T>) -> bool { + this.is_subset(other) + //~^ ERROR the method +} + +fn main() {} diff --git a/tests/ui/missing-trait-bounds/issue-35677.stderr b/tests/ui/missing-trait-bounds/issue-35677.stderr new file mode 100644 index 000000000..05d3de80d --- /dev/null +++ b/tests/ui/missing-trait-bounds/issue-35677.stderr @@ -0,0 +1,19 @@ +error[E0599]: the method `is_subset` exists for reference `&HashSet<T>`, but its trait bounds were not satisfied + --> $DIR/issue-35677.rs:7:10 + | +LL | this.is_subset(other) + | ^^^^^^^^^ method cannot be called on `&HashSet<T>` due to unsatisfied trait bounds + | + = note: the following trait bounds were not satisfied: + `T: Eq` + `T: PartialEq` + which is required by `T: Eq` + `T: Hash` +help: consider restricting the type parameters to satisfy the trait bounds + | +LL | fn is_subset<T>(this: &HashSet<T>, other: &HashSet<T>) -> bool where T: Eq, T: Hash { + | ++++++++++++++++++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0599`. diff --git a/tests/ui/missing-trait-bounds/issue-69725.fixed b/tests/ui/missing-trait-bounds/issue-69725.fixed new file mode 100644 index 000000000..d57badcfd --- /dev/null +++ b/tests/ui/missing-trait-bounds/issue-69725.fixed @@ -0,0 +1,13 @@ +// run-rustfix +// aux-build:issue-69725.rs +#![allow(dead_code)] + +extern crate issue_69725; +use issue_69725::Struct; + +fn crash<A>() where A: Clone { + let _ = Struct::<A>::new().clone(); + //~^ ERROR: the method +} + +fn main() {} diff --git a/tests/ui/missing-trait-bounds/issue-69725.rs b/tests/ui/missing-trait-bounds/issue-69725.rs new file mode 100644 index 000000000..9c88969c5 --- /dev/null +++ b/tests/ui/missing-trait-bounds/issue-69725.rs @@ -0,0 +1,13 @@ +// run-rustfix +// aux-build:issue-69725.rs +#![allow(dead_code)] + +extern crate issue_69725; +use issue_69725::Struct; + +fn crash<A>() { + let _ = Struct::<A>::new().clone(); + //~^ ERROR: the method +} + +fn main() {} diff --git a/tests/ui/missing-trait-bounds/issue-69725.stderr b/tests/ui/missing-trait-bounds/issue-69725.stderr new file mode 100644 index 000000000..980d9dd16 --- /dev/null +++ b/tests/ui/missing-trait-bounds/issue-69725.stderr @@ -0,0 +1,22 @@ +error[E0599]: the method `clone` exists for struct `Struct<A>`, but its trait bounds were not satisfied + --> $DIR/issue-69725.rs:9:32 + | +LL | let _ = Struct::<A>::new().clone(); + | ^^^^^ method cannot be called on `Struct<A>` due to unsatisfied trait bounds + | + ::: $DIR/auxiliary/issue-69725.rs:2:1 + | +LL | pub struct Struct<A>(A); + | -------------------- doesn't satisfy `Struct<A>: Clone` + | + = note: the following trait bounds were not satisfied: + `A: Clone` + which is required by `Struct<A>: Clone` +help: consider restricting the type parameter to satisfy the trait bound + | +LL | fn crash<A>() where A: Clone { + | ++++++++++++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0599`. diff --git a/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.fixed b/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.fixed new file mode 100644 index 000000000..6b24375e4 --- /dev/null +++ b/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.fixed @@ -0,0 +1,7 @@ +// run-rustfix + +pub fn foo<T: std::cmp::PartialEq>(s: &[T], t: &[T]) { + let _ = s == t; //~ ERROR binary operation `==` cannot be applied to type `&[T]` +} + +fn main() {} diff --git a/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.rs b/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.rs new file mode 100644 index 000000000..df47be070 --- /dev/null +++ b/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.rs @@ -0,0 +1,7 @@ +// run-rustfix + +pub fn foo<T>(s: &[T], t: &[T]) { + let _ = s == t; //~ ERROR binary operation `==` cannot be applied to type `&[T]` +} + +fn main() {} diff --git a/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.stderr b/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.stderr new file mode 100644 index 000000000..cde075501 --- /dev/null +++ b/tests/ui/missing-trait-bounds/missing-trait-bound-for-op.stderr @@ -0,0 +1,16 @@ +error[E0369]: binary operation `==` cannot be applied to type `&[T]` + --> $DIR/missing-trait-bound-for-op.rs:4:15 + | +LL | let _ = s == t; + | - ^^ - &[T] + | | + | &[T] + | +help: consider restricting type parameter `T` + | +LL | pub fn foo<T: std::cmp::PartialEq>(s: &[T], t: &[T]) { + | +++++++++++++++++++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0369`. diff --git a/tests/ui/missing-trait-bounds/missing-trait-bounds-for-method-call.rs b/tests/ui/missing-trait-bounds/missing-trait-bounds-for-method-call.rs new file mode 100644 index 000000000..afd47f71c --- /dev/null +++ b/tests/ui/missing-trait-bounds/missing-trait-bounds-for-method-call.rs @@ -0,0 +1,31 @@ +#[derive(Default, PartialEq)] +struct Foo<T> { + bar: Box<[T]>, +} + +trait Bar { + fn foo(&self) {} +} + +impl<T: Default + Bar> Bar for Foo<T> {} + +impl<T> Foo<T> { + fn bar(&self) { + self.foo(); + //~^ ERROR the method + } +} + +struct Fin<T> where T: Bar { + bar: Box<[T]>, +} + +impl<T: Default + Bar> Bar for Fin<T> {} + +impl<T: Bar> Fin<T> { + fn bar(&self) { + self.foo(); + //~^ ERROR the method + } +} +fn main() {} diff --git a/tests/ui/missing-trait-bounds/missing-trait-bounds-for-method-call.stderr b/tests/ui/missing-trait-bounds/missing-trait-bounds-for-method-call.stderr new file mode 100644 index 000000000..968e285af --- /dev/null +++ b/tests/ui/missing-trait-bounds/missing-trait-bounds-for-method-call.stderr @@ -0,0 +1,48 @@ +error[E0599]: the method `foo` exists for reference `&Foo<T>`, but its trait bounds were not satisfied + --> $DIR/missing-trait-bounds-for-method-call.rs:14:14 + | +LL | struct Foo<T> { + | ------------- doesn't satisfy `Foo<T>: Bar` +... +LL | self.foo(); + | ^^^ method cannot be called on `&Foo<T>` due to unsatisfied trait bounds + | +note: the following trait bounds were not satisfied: + `T: Bar` + `T: Default` + --> $DIR/missing-trait-bounds-for-method-call.rs:10:9 + | +LL | impl<T: Default + Bar> Bar for Foo<T> {} + | ^^^^^^^ ^^^ --- ------ + | | | + | | unsatisfied trait bound introduced here + | unsatisfied trait bound introduced here +help: consider restricting the type parameters to satisfy the trait bounds + | +LL | struct Foo<T> where T: Bar, T: Default { + | ++++++++++++++++++++++++ + +error[E0599]: the method `foo` exists for reference `&Fin<T>`, but its trait bounds were not satisfied + --> $DIR/missing-trait-bounds-for-method-call.rs:27:14 + | +LL | struct Fin<T> where T: Bar { + | ------------- doesn't satisfy `Fin<T>: Bar` +... +LL | self.foo(); + | ^^^ method cannot be called on `&Fin<T>` due to unsatisfied trait bounds + | +note: trait bound `T: Default` was not satisfied + --> $DIR/missing-trait-bounds-for-method-call.rs:23:9 + | +LL | impl<T: Default + Bar> Bar for Fin<T> {} + | ^^^^^^^ --- ------ + | | + | unsatisfied trait bound introduced here +help: consider restricting the type parameter to satisfy the trait bound + | +LL | struct Fin<T> where T: Bar, T: Default { + | ++++++++++++ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0599`. |