diff options
| author | Jason Newcomb <jsnewcomb@pm.me> | 2022-01-12 00:25:42 -0500 |
|---|---|---|
| committer | Jason Newcomb <jsnewcomb@pm.me> | 2022-01-12 00:25:42 -0500 |
| commit | d32277d78edfec2c8293fb887aff1783d4595653 (patch) | |
| tree | 0aa05711efe580ad4a4abcb207ec26fe9e55ca38 | |
| parent | 88f5be2041acca3da00648ffc10846dab25cfb5f (diff) | |
| download | rust-d32277d78edfec2c8293fb887aff1783d4595653.tar.gz rust-d32277d78edfec2c8293fb887aff1783d4595653.zip | |
Don't lint `deref_addrof` when the two operations occur in different expansions
| -rw-r--r-- | clippy_lints/src/reference.rs | 1 | ||||
| -rw-r--r-- | tests/ui/deref_addrof.fixed | 2 | ||||
| -rw-r--r-- | tests/ui/deref_addrof.rs | 2 | ||||
| -rw-r--r-- | tests/ui/deref_addrof.stderr | 4 |
4 files changed, 7 insertions, 2 deletions
diff --git a/clippy_lints/src/reference.rs b/clippy_lints/src/reference.rs index 22ae7a291d0..b2448372370 100644 --- a/clippy_lints/src/reference.rs +++ b/clippy_lints/src/reference.rs @@ -50,6 +50,7 @@ impl EarlyLintPass for DerefAddrOf { if_chain! { if let ExprKind::Unary(UnOp::Deref, ref deref_target) = e.kind; if let ExprKind::AddrOf(_, ref mutability, ref addrof_target) = without_parens(deref_target).kind; + if deref_target.span.ctxt() == e.span.ctxt(); if !addrof_target.span.from_expansion(); then { let mut applicability = Applicability::MachineApplicable; diff --git a/tests/ui/deref_addrof.fixed b/tests/ui/deref_addrof.fixed index 0029fc673f1..2f489deb1ee 100644 --- a/tests/ui/deref_addrof.fixed +++ b/tests/ui/deref_addrof.fixed @@ -37,6 +37,8 @@ fn main() { let b = &a; let b = *aref; + + let _ = unsafe { *core::ptr::addr_of!(a) }; } #[rustfmt::skip] diff --git a/tests/ui/deref_addrof.rs b/tests/ui/deref_addrof.rs index f2f02dd5e72..49f360b9a7f 100644 --- a/tests/ui/deref_addrof.rs +++ b/tests/ui/deref_addrof.rs @@ -37,6 +37,8 @@ fn main() { let b = *&&a; let b = **&aref; + + let _ = unsafe { *core::ptr::addr_of!(a) }; } #[rustfmt::skip] diff --git a/tests/ui/deref_addrof.stderr b/tests/ui/deref_addrof.stderr index 5bc1cbfa215..75371fcdb96 100644 --- a/tests/ui/deref_addrof.stderr +++ b/tests/ui/deref_addrof.stderr @@ -49,7 +49,7 @@ LL | let b = **&aref; | ^^^^^^ help: try this: `aref` error: immediately dereferencing a reference - --> $DIR/deref_addrof.rs:45:9 + --> $DIR/deref_addrof.rs:47:9 | LL | *& $visitor | ^^^^^^^^^^^ help: try this: `$visitor` @@ -60,7 +60,7 @@ LL | m!(self) = note: this error originates in the macro `m` (in Nightly builds, run with -Z macro-backtrace for more info) error: immediately dereferencing a reference - --> $DIR/deref_addrof.rs:52:9 + --> $DIR/deref_addrof.rs:54:9 | LL | *& mut $visitor | ^^^^^^^^^^^^^^^ help: try this: `$visitor` |
