about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2022-03-29 10:17:27 -0700
committerMichael Howell <michael@notriddle.com>2022-03-29 10:19:19 -0700
commit0eea3346d215e76e6de283a2c3d9674a1e762452 (patch)
tree2a1c7601ca88b985d57861138be2069d4157d503
parent11909e3588319235e28e99294e17cca11db1d7e2 (diff)
downloadrust-0eea3346d215e76e6de283a2c3d9674a1e762452.tar.gz
rust-0eea3346d215e76e6de283a2c3d9674a1e762452.zip
diagnostics: regression test for derive bounds
Closes #79076
-rw-r--r--src/test/ui/suggestions/derive-clone-for-eq.fixed18
-rw-r--r--src/test/ui/suggestions/derive-clone-for-eq.rs18
-rw-r--r--src/test/ui/suggestions/derive-clone-for-eq.stderr25
3 files changed, 61 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/derive-clone-for-eq.fixed b/src/test/ui/suggestions/derive-clone-for-eq.fixed
new file mode 100644
index 00000000000..f07784d53b3
--- /dev/null
+++ b/src/test/ui/suggestions/derive-clone-for-eq.fixed
@@ -0,0 +1,18 @@
+// run-rustfix
+// https://github.com/rust-lang/rust/issues/79076
+
+use std::cmp::PartialEq;
+
+#[derive(Clone, Eq)] //~ ERROR [E0277]
+pub struct Struct<T: std::clone::Clone>(T);
+
+impl<T: Clone, U> PartialEq<U> for Struct<T>
+where
+    U: Into<Struct<T>> + Clone
+{
+    fn eq(&self, _other: &U) -> bool {
+        todo!()
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/suggestions/derive-clone-for-eq.rs b/src/test/ui/suggestions/derive-clone-for-eq.rs
new file mode 100644
index 00000000000..15c0d4659fb
--- /dev/null
+++ b/src/test/ui/suggestions/derive-clone-for-eq.rs
@@ -0,0 +1,18 @@
+// run-rustfix
+// https://github.com/rust-lang/rust/issues/79076
+
+use std::cmp::PartialEq;
+
+#[derive(Clone, Eq)] //~ ERROR [E0277]
+pub struct Struct<T>(T);
+
+impl<T: Clone, U> PartialEq<U> for Struct<T>
+where
+    U: Into<Struct<T>> + Clone
+{
+    fn eq(&self, _other: &U) -> bool {
+        todo!()
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/suggestions/derive-clone-for-eq.stderr b/src/test/ui/suggestions/derive-clone-for-eq.stderr
new file mode 100644
index 00000000000..55a23c031d5
--- /dev/null
+++ b/src/test/ui/suggestions/derive-clone-for-eq.stderr
@@ -0,0 +1,25 @@
+error[E0277]: the trait bound `T: Clone` is not satisfied
+  --> $DIR/derive-clone-for-eq.rs:6:17
+   |
+LL | #[derive(Clone, Eq)]
+   |                 ^^ the trait `Clone` is not implemented for `T`
+   |
+note: required because of the requirements on the impl of `PartialEq` for `Struct<T>`
+  --> $DIR/derive-clone-for-eq.rs:9:19
+   |
+LL | impl<T: Clone, U> PartialEq<U> for Struct<T>
+   |                   ^^^^^^^^^^^^     ^^^^^^^^^
+note: required by a bound in `Eq`
+  --> $SRC_DIR/core/src/cmp.rs:LL:COL
+   |
+LL | pub trait Eq: PartialEq<Self> {
+   |               ^^^^^^^^^^^^^^^ required by this bound in `Eq`
+   = note: this error originates in the derive macro `Eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider restricting type parameter `T`
+   |
+LL | pub struct Struct<T: std::clone::Clone>(T);
+   |                    +++++++++++++++++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.