diagnostics: regression test for derive bounds

Closes #79076
This commit is contained in:
Michael Howell 2022-03-29 10:17:27 -07:00
parent 11909e3588
commit 0eea3346d2
3 changed files with 61 additions and 0 deletions

View File

@ -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() {}

View File

@ -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() {}

View File

@ -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`.