Skip to content

Commit

Permalink
diagnostics: regression test for derive bounds
Browse files Browse the repository at this point in the history
Closes #79076
  • Loading branch information
notriddle committed Mar 29, 2022
1 parent 11909e3 commit 0eea334
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/test/ui/suggestions/derive-clone-for-eq.fixed
Original file line number Diff line number Diff line change
@@ -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() {}
18 changes: 18 additions & 0 deletions src/test/ui/suggestions/derive-clone-for-eq.rs
Original file line number Diff line number Diff line change
@@ -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() {}
25 changes: 25 additions & 0 deletions src/test/ui/suggestions/derive-clone-for-eq.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 0eea334

Please sign in to comment.