aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-09-18 15:34:24 +0200
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2024-03-26 17:35:02 +0000
commitf88db85c0272c3f25d2638565d5f6647b64363e5 (patch)
treecdc5baca5458daa4df435b6f548eccd41349bac7
parent73901b2b89baa60de6155000f042097ee72a13cd (diff)
downloadgcc-f88db85c0272c3f25d2638565d5f6647b64363e5.zip
gcc-f88db85c0272c3f25d2638565d5f6647b64363e5.tar.gz
gcc-f88db85c0272c3f25d2638565d5f6647b64363e5.tar.bz2
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.patry@embecosm.com>
-rw-r--r--gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc4
1 files 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 72c3560..3b1ccc1 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> &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 ());