https://gcc.gnu.org/g:f88db85c0272c3f25d2638565d5f6647b64363e5
commit f88db85c0272c3f25d2638565d5f6647b64363e5 Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com> Date: Mon Sep 18 15:34:24 2023 +0200 Prevent error emission on resolver reentry The resolver was emitting an error when meeting the same symbol twice. What is important here is the origin of the resolved symbol, we should emit an error when the name is similar but the symbol isn't be not when the resolver is simply meeting the exact same symbol. gcc/rust/ChangeLog: * resolve/rust-toplevel-name-resolver-2.0.cc (insert_macros): Add constraint over the ast node id. (TopLevel::visit): Likewise. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com> Diff: --- gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 72c3560b9daf..3b1ccc1d3c50 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -91,7 +91,7 @@ insert_macros (std::vector<PROC_MACRO> ¯os, NameResolutionContext &ctx) { auto res = ctx.macros.insert (macro.get_name (), macro.get_node_id ()); - if (!res) + if (!res && res.error ().existing != macro.get_node_id ()) { rust_error_at (UNKNOWN_LOCATION, ErrorCode::E0428, "macro %qs defined multiple times", @@ -167,7 +167,7 @@ TopLevel::visit (AST::MacroRulesDefinition ¯o) { auto res = ctx.macros.insert_at_root (macro.get_rule_name (), macro.get_node_id ()); - if (!res) + if (!res && res.error ().existing != macro.get_node_id ()) { // TODO: Factor this rich_location rich_loc (line_table, macro.get_locus ());