diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 6df625380ff..1699c3dba77 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -1661,6 +1661,14 @@ pub fn diagnostics(self, db: &dyn HirDatabase, acc: &mut Vec) { let Some(&local) = mir_body.binding_locals.get(binding_id) else { continue; }; + if body[binding_id] + .definitions + .iter() + .any(|&pat| source_map.pat_syntax(pat).is_err()) + { + // Skip synthetic bindings + continue; + } let need_mut = &mol[local]; let local = Local { parent: self.into(), binding_id }; match (need_mut, local.is_mut(db)) { diff --git a/crates/ide-diagnostics/src/handlers/mutability_errors.rs b/crates/ide-diagnostics/src/handlers/mutability_errors.rs index f61460e317f..c52d8042c75 100644 --- a/crates/ide-diagnostics/src/handlers/mutability_errors.rs +++ b/crates/ide-diagnostics/src/handlers/mutability_errors.rs @@ -1091,6 +1091,19 @@ fn main() { //^^^^^ 💡 weak: variable does not need to be mutable f(x); } +"#, + ); + } + + #[test] + fn regression_15099() { + check_diagnostics( + r#" +//- minicore: iterator, range +fn f() { + loop {} + for _ in 0..2 {} +} "#, ); }