https://gcc.gnu.org/g:246ec58c9bc56bf454f7781c2f1b8e72bbe30394

commit r16-5302-g246ec58c9bc56bf454f7781c2f1b8e72bbe30394
Author: Jakub Jelinek <[email protected]>
Date:   Sat Nov 15 16:04:56 2025 +0100

    cobol: Fix bootstrap [PR122691]
    
    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.
    
    2025-11-15  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.

Diff:
---
 gcc/cobol/lexio.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/cobol/lexio.cc b/gcc/cobol/lexio.cc
index 52d1affee810..d7a4f1b28145 100644
--- a/gcc/cobol/lexio.cc
+++ b/gcc/cobol/lexio.cc
@@ -907,7 +907,8 @@ parse_replace_pairs( const char *stmt, const char *estmt, 
bool is_copy_stmt ) {
     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__,

Reply via email to