129 lines
2.4 KiB
Rust
129 lines
2.4 KiB
Rust
//@no-rustfix
|
|
|
|
#![warn(clippy::unconditional_recursion)]
|
|
|
|
enum Foo {
|
|
A,
|
|
B,
|
|
}
|
|
|
|
impl PartialEq for Foo {
|
|
fn ne(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
self != other
|
|
}
|
|
fn eq(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
self == other
|
|
}
|
|
}
|
|
|
|
enum Foo2 {
|
|
A,
|
|
B,
|
|
}
|
|
|
|
impl PartialEq for Foo2 {
|
|
fn ne(&self, other: &Self) -> bool {
|
|
self != &Foo2::B // no error here
|
|
}
|
|
fn eq(&self, other: &Self) -> bool {
|
|
self == &Foo2::B // no error here
|
|
}
|
|
}
|
|
|
|
enum Foo3 {
|
|
A,
|
|
B,
|
|
}
|
|
|
|
impl PartialEq for Foo3 {
|
|
fn ne(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
self.ne(other)
|
|
}
|
|
fn eq(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
self.eq(other)
|
|
}
|
|
}
|
|
|
|
enum Foo4 {
|
|
A,
|
|
B,
|
|
}
|
|
|
|
impl PartialEq for Foo4 {
|
|
fn ne(&self, other: &Self) -> bool {
|
|
self.eq(other) // no error
|
|
}
|
|
fn eq(&self, other: &Self) -> bool {
|
|
self.ne(other) // no error
|
|
}
|
|
}
|
|
|
|
enum Foo5 {
|
|
A,
|
|
B,
|
|
}
|
|
|
|
impl Foo5 {
|
|
fn a(&self) -> bool {
|
|
true
|
|
}
|
|
}
|
|
|
|
impl PartialEq for Foo5 {
|
|
fn ne(&self, other: &Self) -> bool {
|
|
self.a() // no error
|
|
}
|
|
fn eq(&self, other: &Self) -> bool {
|
|
self.a() // no error
|
|
}
|
|
}
|
|
|
|
struct S;
|
|
|
|
// Check the order doesn't matter.
|
|
impl PartialEq for S {
|
|
fn ne(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
other != self
|
|
}
|
|
fn eq(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
other == self
|
|
}
|
|
}
|
|
|
|
struct S2;
|
|
|
|
// Check that if the same element is compared, it's also triggering the lint.
|
|
impl PartialEq for S2 {
|
|
fn ne(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
other != other
|
|
}
|
|
fn eq(&self, other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
other == other
|
|
}
|
|
}
|
|
|
|
struct S3;
|
|
|
|
impl PartialEq for S3 {
|
|
fn ne(&self, _other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
self != self
|
|
}
|
|
fn eq(&self, _other: &Self) -> bool {
|
|
//~^ ERROR: function cannot return without recursing
|
|
self == self
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
// test code goes here
|
|
}
|