Hi!

Andrew's recent r16-5258 change broke bootstrap on x86_64-linux with
cobol enabled, the error is
../../gcc/cobol/lexio.cc: In function ‘std::pair<std::__cxx11::list<replace_t>,
char*> parse_replace_pairs(const char*, const char*, bool)’:
../../gcc/cobol/lexio.cc:907:76: error: ‘%.*s’ directive argument is null
[-Werror=format-overflow=]
  907 |     dbgmsg( "%s:%d: %s: " HOST_SIZE_T_PRINT_UNSIGNED " pairs parsed 
from  '%.*s'",
      |                                                                         
   ^~~~
The problem is that some jump threading is happening now that didn't happen
before and a dbgmsg call is duplicated, once with 0, NULL as the last two
arguments, once with some size and pointer.

The following patch makes sure we never call it with NULL pointer, even when
the size is 0, to silence the warning.

Bootstrapped/regtested on x86_64-linux, ok for trunk?

2025-11-14  Jakub Jelinek  <[email protected]>

        PR cobol/122691
        * lexio.cc (parse_replace_pairs): Replace parsed.stmt.p with
        parsed.stmt.size() ? parsed.stmt.p : "" in the last argument to
        dbgmsg.

--- gcc/lexio.cc.jj     2025-07-15 14:49:29.931515987 +0200
+++ gcc/lexio.cc        2025-11-14 20:16:46.604504566 +0100
@@ -907,7 +907,8 @@ parse_replace_pairs( const char *stmt, c
     dbgmsg( "%s:%d: %s: " HOST_SIZE_T_PRINT_UNSIGNED " pairs parsed from  
'%.*s'",
             __func__, __LINE__,
             parsed.done() ? "done" : "not done",
-            (fmt_size_t)pairs.size(), parsed.stmt.size(), parsed.stmt.p );
+            (fmt_size_t)pairs.size(), parsed.stmt.size(),
+            parsed.stmt.size() ? parsed.stmt.p : "" );
     int i = 0;
     for( const auto& replace : pairs ) {
       dbgmsg("%s:%d:%4d: '%s' => '%s'", __func__, __LINE__,

        Jakub

Reply via email to