]> git.lizzy.rs Git - rust.git/commitdiff
Fix infinite recursion when computing diagnostics for inner items
authorJonas Schievink <jonasschievink@gmail.com>
Thu, 18 Mar 2021 19:15:06 +0000 (20:15 +0100)
committerJonas Schievink <jonasschievink@gmail.com>
Thu, 18 Mar 2021 19:15:06 +0000 (20:15 +0100)
crates/hir_ty/src/diagnostics/decl_check.rs

index bfe239793c6598a97f0b847c266c450051e65125..33a0f4d7d484bbf9c8fd590054403900b1a6f736 100644 (file)
@@ -102,7 +102,7 @@ fn validate_func(&mut self, func: FunctionId) {
         let db = self.db;
         for block_def_map in body.block_scopes.iter().filter_map(|block| db.block_def_map(*block)) {
             for (_, module) in block_def_map.modules() {
-                for (def_id, _) in module.scope.values() {
+                for def_id in module.scope.declarations() {
                     let mut validator = DeclValidator::new(self.db, self.krate, self.sink);
                     validator.validate_item(def_id);
                 }
@@ -902,4 +902,17 @@ fn ignores_extern_items() {
             "#,
         );
     }
+
+    #[test]
+    fn infinite_loop_inner_items() {
+        check_diagnostics(
+            r#"
+fn qualify() {
+    mod foo {
+        use super::*;
+    }
+}
+            "#,
+        )
+    }
 }