diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2023-02-14 14:50:08 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2023-02-14 15:37:48 +0100 |
| commit | e4e5924b99b30c693bc87aa95ef51fd2263b6280 (patch) | |
| tree | 7cb29fe6c77a769fedf6e7b7ed295e3cd4fb930d | |
| parent | 63562a6854f1ec95f5e53936b5cec65a58aca1da (diff) | |
| download | rust-e4e5924b99b30c693bc87aa95ef51fd2263b6280.tar.gz rust-e4e5924b99b30c693bc87aa95ef51fd2263b6280.zip | |
Do not base map_entry lint suggestion on expanded code
| -rw-r--r-- | clippy_lints/src/entry.rs | 4 | ||||
| -rw-r--r-- | tests/ui/entry.fixed | 14 | ||||
| -rw-r--r-- | tests/ui/entry.rs | 14 |
3 files changed, 32 insertions, 0 deletions
diff --git a/clippy_lints/src/entry.rs b/clippy_lints/src/entry.rs index b44e6243588..ed9d94cdec3 100644 --- a/clippy_lints/src/entry.rs +++ b/clippy_lints/src/entry.rs @@ -65,6 +65,10 @@ declare_lint_pass!(HashMapPass => [MAP_ENTRY]); impl<'tcx> LateLintPass<'tcx> for HashMapPass { #[expect(clippy::too_many_lines)] fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) { + if expr.span.from_expansion() { + return; + } + let Some(higher::If { cond: cond_expr, then: then_expr, r#else: else_expr }) = higher::If::hir(expr) else { return }; diff --git a/tests/ui/entry.fixed b/tests/ui/entry.fixed index 79c29c04e05..dbe09e0ff3c 100644 --- a/tests/ui/entry.fixed +++ b/tests/ui/entry.fixed @@ -152,4 +152,18 @@ fn hash_map<K: Eq + Hash + Copy, V: Copy>(m: &mut HashMap<K, V>, m2: &mut HashMa }); } +// Issue 10331 +// do not suggest a bad expansion because the compiler unrolls the first +// occurrence of the loop +pub fn issue_10331() { + let mut m = HashMap::new(); + let mut i = 0; + let mut x = 0; + while !m.contains_key(&x) { + m.insert(x, i); + i += 1; + x += 1; + } +} + fn main() {} diff --git a/tests/ui/entry.rs b/tests/ui/entry.rs index 2d7985457d8..30fed34fc5d 100644 --- a/tests/ui/entry.rs +++ b/tests/ui/entry.rs @@ -156,4 +156,18 @@ fn hash_map<K: Eq + Hash + Copy, V: Copy>(m: &mut HashMap<K, V>, m2: &mut HashMa } } +// Issue 10331 +// do not suggest a bad expansion because the compiler unrolls the first +// occurrence of the loop +pub fn issue_10331() { + let mut m = HashMap::new(); + let mut i = 0; + let mut x = 0; + while !m.contains_key(&x) { + m.insert(x, i); + i += 1; + x += 1; + } +} + fn main() {} |
