[COMMITTED 2/2] a68: provide more detail in multiple declaration diagnostics

Jose E. Marchesi jemarch@gnu.org
Mon Jun 15 19:11:22 GMT 2026


Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>

gcc/algol68/ChangeLog

	* a68-parser-taxes.cc (attr_descr): New function.
	(already_declared): Use attr_descr for diagnostic.
	(already_declared_hidden): Likewise.
---
 gcc/algol68/a68-parser-taxes.cc | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/gcc/algol68/a68-parser-taxes.cc b/gcc/algol68/a68-parser-taxes.cc
index 62418c035ff..41fe98896e8 100644
--- a/gcc/algol68/a68-parser-taxes.cc
+++ b/gcc/algol68/a68-parser-taxes.cc
@@ -635,13 +635,29 @@ a68_collect_taxes (NODE_T *p)
   test_firmly_related_ops_local (NO_NODE, OPERATORS (A68_STANDENV));
 }
 
+/* Get a description text for attribute passed as the second argument to
+   already_declared and already-declared_hidden.  To be used in
+   diagnostics.  */
+
+static const char *
+attr_descr (int a)
+{
+  return (a == OP_SYMBOL ? "operator"
+	  : a == PRIO_SYMBOL ? "priority for operator"
+	  : a == INDICANT ? "mode indicant"
+	  : a == LABEL ? "label"
+	  : a == IDENTIFIER ? "identifier"
+	  : "tag");
+}
+
 /* Whether tag has already been declared in this range.  */
 
 static void
 already_declared (NODE_T *n, int a)
 {
   if (find_tag_local (TABLE (n), a, NSYMBOL (n)) != NO_TAG)
-    a68_error (n, "multiple declaration of tag %qs", NSYMBOL (n));
+    a68_error (n, "multiple declaration of %s %qs",
+	       attr_descr (a), NSYMBOL (n));
 }
 
 /* Whether tag has already been declared in this range.  */
@@ -650,7 +666,8 @@ static void
 already_declared_hidden (NODE_T *n, int a)
 {
   if (find_tag_local (TABLE (n), a, NSYMBOL (n)) != NO_TAG)
-    a68_error (n, "multiple declaration of tag %qs", NSYMBOL (n));
+    a68_error (n, "multiple declaration of %s %qs",
+	       attr_descr (a), NSYMBOL (n));
 
   TAG_T *s = a68_find_tag_global (PREVIOUS (TABLE (n)), a, NSYMBOL (n));
 
@@ -962,7 +979,7 @@ tax_variable_dec (NODE_T *p, int *q, MOID_T **m, bool e)
 	    HEAP (entry) = STATIC_SYMBOL;
 	  else
 	    HEAP (entry) = *q;
-	  
+
 	  if (HEAP (entry) == LOC_SYMBOL)
 	    {
 	      TAG_T *z = a68_add_tag (TABLE (p), ANONYMOUS, p, SUB (*m), GENERATOR);
@@ -1698,7 +1715,7 @@ a68_mark_auxilliary (NODE_T *p)
 
 	  if (TAX (p) != NO_TAG)
 	    USE (TAX (p)) = true;
-	  
+
 	  if ((z = a68_find_tag_global (TABLE (p), PRIO_SYMBOL, NSYMBOL (p))) != NO_TAG)
 	    USE (z) = true;
 	}
-- 
2.39.5



More information about the Algol68 mailing list