-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Closed
Labels
C-enhancementCategory: Enhancement of lints, like adding more cases or adding help messagesCategory: Enhancement of lints, like adding more cases or adding help messages
Description
What it does
Aim would be to warn when intended Deref is not triggered correctly.
use std::ops::Deref;
struct TestType;
impl Deref for TestType {
type Target = str;
fn deref(&self) -> &Self::Target {
"test"
}
}
impl std::fmt::Display for TestType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", &**self)
}
}
fn main() {
let test = TestType {};
println!("Hello, world!, {}", test);
}If we write:
write!(f, "{}", &self)or
write!(f, "{}", &*self)Then the Deref to str is not triggered and we got a stack overflow due to recursively calling Display::fmt
At the moment there are no clippy or rustc warnings or errors, and we just get a stack overflow.
Categories (optional)
- Kind:
clippy::suspicious
What is the advantage of the recommended code over the original code
The recommended code correctly triggers the Deref and avoids the stack overflow.
Metadata
Metadata
Assignees
Labels
C-enhancementCategory: Enhancement of lints, like adding more cases or adding help messagesCategory: Enhancement of lints, like adding more cases or adding help messages