about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-03-14 13:30:21 +0000
committerbors <bors@rust-lang.org>2023-03-14 13:30:21 +0000
commitc465bf7f67ff12b9d7246a26ea83f66f0de228da (patch)
treea7c14837cd0c1662914615f452860dcc92bb271b
parent5941616ddc63d52421c8daa026e4cb7a3a888474 (diff)
parent6631480a7b7cb7b3e7d53c9c4cd7915f7ebc3110 (diff)
downloadrust-c465bf7f67ff12b9d7246a26ea83f66f0de228da.tar.gz
rust-c465bf7f67ff12b9d7246a26ea83f66f0de228da.zip
Auto merge of #10499 - blyxyas:fix-almost_swapped, r=giraffate
Fix `almost_swapped` false positive (`let mut a = b; a = a`)

Fixes `2` in #10421
changelog: [`almost_swapped`]: Fix false positive when a variable is changed to itself. (`a = a`)
-rw-r--r--clippy_lints/src/swap.rs1
-rw-r--r--tests/ui/swap.fixed8
-rw-r--r--tests/ui/swap.rs8
3 files changed, 17 insertions, 0 deletions
diff --git a/clippy_lints/src/swap.rs b/clippy_lints/src/swap.rs
index 1aeac724ab1..5087c19e5f3 100644
--- a/clippy_lints/src/swap.rs
+++ b/clippy_lints/src/swap.rs
@@ -190,6 +190,7 @@ fn check_suspicious_swap(cx: &LateContext<'_>, block: &Block<'_>) {
             && first.span.eq_ctxt(second.span)
             && is_same(cx, lhs0, rhs1)
             && is_same(cx, lhs1, rhs0)
+			&& !is_same(cx, lhs1, rhs1) // Ignore a = b; a = a (#10421)
             && let Some(lhs_sugg) = match &lhs0 {
                 ExprOrIdent::Expr(expr) => Sugg::hir_opt(cx, expr),
                 ExprOrIdent::Ident(ident) => Some(Sugg::NonParen(ident.as_str().into())),
diff --git a/tests/ui/swap.fixed b/tests/ui/swap.fixed
index 04008c0d9b3..775b0dbde88 100644
--- a/tests/ui/swap.fixed
+++ b/tests/ui/swap.fixed
@@ -186,3 +186,11 @@ const fn issue_9864(mut u: u32) -> u32 {
     v = temp;
     u + v
 }
+
+#[allow(clippy::let_and_return)]
+const fn issue_10421(x: u32) -> u32 {
+    let a = x;
+    let a = a;
+    let a = a;
+    a
+}
diff --git a/tests/ui/swap.rs b/tests/ui/swap.rs
index ef8a81c8341..bc9a78b49c7 100644
--- a/tests/ui/swap.rs
+++ b/tests/ui/swap.rs
@@ -215,3 +215,11 @@ const fn issue_9864(mut u: u32) -> u32 {
     v = temp;
     u + v
 }
+
+#[allow(clippy::let_and_return)]
+const fn issue_10421(x: u32) -> u32 {
+    let a = x;
+    let a = a;
+    let a = a;
+    a
+}