https://gcc.gnu.org/g:57d58427aa7916a71fd3a2596ef5dd88ef64b8de

commit r16-9333-g57d58427aa7916a71fd3a2596ef5dd88ef64b8de
Author: Jose E. Marchesi <[email protected]>
Date:   Wed Jun 3 12:00:21 2026 +0200

    a68: fix diagnostic in recover_from_error
    
    The recover_from_error function calls a68_phrase_to_text in order to
    get a descriptive text to emit in diagnostics.  This text, however,
    may contain format tags such as %< and %>, so it has to be passed to
    a68_error as a format string, therwise the format tags are not
    interpreted and get printed verbatim.
    
    Signed-off-by: Jose E. Marchesi <[email protected]>
    
    gcc/algol68/ChangeLog
    
            * a68-parser-bottom-up.cc (recover_from_error): Use the output of
            a68_phrase_to_text as format string so format tags are honored.
    
    (cherry picked from commit 290221e86a32369f66a8ac089bd8430e45efe9f4)

Diff:
---
 gcc/algol68/a68-parser-bottom-up.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gcc/algol68/a68-parser-bottom-up.cc 
b/gcc/algol68/a68-parser-bottom-up.cc
index 5cc0037ecc0e..f3e5793283ef 100644
--- a/gcc/algol68/a68-parser-bottom-up.cc
+++ b/gcc/algol68/a68-parser-bottom-up.cc
@@ -100,6 +100,8 @@
 #include "coretypes.h"
 #include "options.h"
 
+#include <string>
+
 #include "a68.h"
 #include "a68-pretty-print.h"
 
@@ -2836,8 +2838,10 @@ recover_from_error (NODE_T * p, enum a68_attribute 
expect, bool suppress)
        }
       else
        {
+         std::string fmt = seq;
+         fmt += " is an invalid %e";
          a68_attr_format_token a (expect);
-         a68_error (w, "%s is an invalid %e", seq, &a);
+         a68_error (w, fmt.c_str (), &a);
        }
 
     if (ERROR_COUNT (&A68_JOB) >= MAX_ERRORS)

Reply via email to