Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #22822 from RealRTTV/master
Fix: panic with a function item and a proc macro item having a duplicate name
Chayim Refael Friedman 4 weeks ago
parent 51cb2bc · parent 7cd274c · commit 8ff1f80
-rw-r--r--crates/hir-def/src/item_scope.rs7
-rw-r--r--crates/hir-def/src/nameres/tests/macros.rs15
2 files changed, 20 insertions, 2 deletions
diff --git a/crates/hir-def/src/item_scope.rs b/crates/hir-def/src/item_scope.rs
index 16283a2cb3..ac1d2fd2a4 100644
--- a/crates/hir-def/src/item_scope.rs
+++ b/crates/hir-def/src/item_scope.rs
@@ -483,8 +483,11 @@ impl ItemScope {
}
pub(crate) fn remove_from_value_ns(&mut self, name: &Name, def: ModuleDefId) {
- let entry = self.values.shift_remove(name);
- assert!(entry.is_some_and(|entry| entry.def == def))
+ // predicate needed since a different item with the same name may be registered instead,
+ // leading to `shift_remove` removing the wrong item.
+ if self.values.get(name).is_some_and(|entry| entry.def == def) {
+ let _ = self.values.shift_remove(name);
+ }
}
pub(crate) fn get_legacy_macro(&self, name: &Name) -> Option<&[MacroId]> {
diff --git a/crates/hir-def/src/nameres/tests/macros.rs b/crates/hir-def/src/nameres/tests/macros.rs
index e9cb0f1dd3..75ec728011 100644
--- a/crates/hir-def/src/nameres/tests/macros.rs
+++ b/crates/hir-def/src/nameres/tests/macros.rs
@@ -1755,3 +1755,18 @@ enum MyEnum {}
"#]],
);
}
+
+#[test]
+fn regression_22806() {
+ compute_crate_def_map(
+ r#"
+#![crate_type = "proc-macro"]
+
+fn foo() {}
+
+#[proc_macro]
+fn foo() {}
+ "#,
+ |_| (),
+ )
+}