]> gcc.gnu.org Git - gcc.git/commitdiff
gccrs: Prevent error emission on resolver reentry
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Mon, 18 Sep 2023 13:34:24 +0000 (15:34 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 1 Aug 2024 14:52:25 +0000 (16:52 +0200)
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

index 72c3560b9daf8d16845da9fa55bafc9806befefd..3b1ccc1d3c5010cfee3f6e03ac54bb94156334a2 100644 (file)
@@ -91,7 +91,7 @@ insert_macros (std::vector<PROC_MACRO> &macros, 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 &macro)
     {
       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 ());
This page took 0.063721 seconds and 5 git commands to generate.