Commit Message
Arthur Cohen
Aug. 1, 2024, 2:57 p.m. UTC
From: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> 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.patry@embecosm.com> --- 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 72c3560b9da..3b1ccc1d3c5 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 ());