https://gcc.gnu.org/g:007392c0f93cf46b9e87aebdd04e123e3381fc07
commit r16-1595-g007392c0f93cf46b9e87aebdd04e123e3381fc07 Author: James K. Lowden <jklow...@cobolworx.com> Date: Fri Jun 20 12:43:51 2025 -0400 cobol: Correct diagnostic strings for 32-bit builds. Avoid %z for printf-family. Cast pid_t to long. Avoid use of YYUNDEF for old Bison versions. PR cobol/120621 gcc/cobol/ChangeLog: * genapi.cc (parser_compile_ecs): Cast argument to unsigned long. (parser_compile_dcls): Same. (parser_division): RAII. (inspect_tally): Cast argument to unsigned long. * lexio.cc (cdftext::lex_open): Cast pid_t to long. * parse.y: hard-code values for old versions of Bison, and message format. * scan_ante.h (wait_for_the_child): Cast pid_t to long. Diff: --- gcc/cobol/genapi.cc | 25 +++++++++++++------------ gcc/cobol/lexio.cc | 6 +++--- gcc/cobol/parse.y | 8 ++++---- gcc/cobol/scan_ante.h | 9 ++++++--- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc index 0ea41f167afa..42f1599a87f6 100644 --- a/gcc/cobol/genapi.cc +++ b/gcc/cobol/genapi.cc @@ -957,8 +957,8 @@ parser_compile_ecs( const std::vector<uint64_t>& ecs ) { SHOW_PARSE_HEADER char ach[64]; - snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", - ecs.size(), as_voidp(retval)); + snprintf(ach, sizeof(ach), " Size is %lu; retval is %p", + gb4(ecs.size()), as_voidp(retval)); SHOW_PARSE_TEXT(ach) SHOW_PARSE_END } @@ -966,8 +966,8 @@ parser_compile_ecs( const std::vector<uint64_t>& ecs ) { TRACE1_HEADER char ach[64]; - snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", - ecs.size(), as_voidp(retval)); + snprintf(ach, sizeof(ach), " Size is %lu; retval is %p", + gb4(ecs.size()), as_voidp(retval)); TRACE1_TEXT_ABC("", ach, ""); TRACE1_END } @@ -1006,8 +1006,8 @@ parser_compile_dcls( const std::vector<uint64_t>& dcls ) { SHOW_PARSE_HEADER char ach[64]; - snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", - dcls.size(), as_voidp(retval)); + snprintf(ach, sizeof(ach), " Size is %lu; retval is %p", + gb4(dcls.size()), as_voidp(retval)); SHOW_PARSE_TEXT(ach); SHOW_PARSE_END } @@ -1015,8 +1015,8 @@ parser_compile_dcls( const std::vector<uint64_t>& dcls ) { TRACE1_HEADER char ach[64]; - snprintf(ach, sizeof(ach), " Size is %ld; retval is %p", - dcls.size(), as_voidp(retval)); + snprintf(ach, sizeof(ach), " Size is %lu; retval is %p", + gb4(dcls.size()), as_voidp(retval)); TRACE1_TEXT_ABC("", ach, ""); TRACE1_END } @@ -6898,7 +6898,7 @@ parser_division(cbl_division_t division, // There are 'nusing' elements in the PROCEDURE DIVISION USING list. - tree parameter; + tree parameter = NULL_TREE; tree rt_i = gg_define_int(); for(size_t i=0; i<nusing; i++) { @@ -9932,17 +9932,18 @@ inspect_tally(bool backward, { SHOW_PARSE_HEADER char ach[128]; - sprintf(ach, "There are %lu identifier_2", identifier_2.size()); + sprintf(ach, "There are %lu identifier_2", gb4(identifier_2.size())); SHOW_PARSE_TEXT(ach); for(size_t i=0; i<identifier_2.size(); i++) { SHOW_PARSE_INDENT - sprintf(ach, "%lu: bounds: %lu", i, identifier_2[i].nbound()); + sprintf(ach, "%lu: bounds: %lu", gb4(i), gb4(identifier_2[i].nbound())); SHOW_PARSE_TEXT(ach); for(size_t j=0; j<identifier_2[i].nbound(); j++) { SHOW_PARSE_INDENT - sprintf(ach, " %lu: matches: %lu", j, identifier_2[i][j].matches.size()); + sprintf(ach, " %lu: matches: %lu", + gb4(j), gb4(identifier_2[i][j].matches.size())); SHOW_PARSE_TEXT(ach); SHOW_PARSE_INDENT diff --git a/gcc/cobol/lexio.cc b/gcc/cobol/lexio.cc index 754a948bfc51..5b6000d3c7f4 100644 --- a/gcc/cobol/lexio.cc +++ b/gcc/cobol/lexio.cc @@ -1524,11 +1524,11 @@ cdftext::lex_open( const char filename[] ) { int status; auto kid = wait(&status); gcc_assert(pid == kid); - if( kid == -1 ) cbl_err( "failed waiting for pid %d", pid); + if( kid == -1 ) cbl_err( "failed waiting for pid %ld", static_cast<long>(pid)); if( WIFSIGNALED(status) ) { - cbl_errx( "%s pid %d terminated by %s", - filter, kid, strsignal(WTERMSIG(status)) ); + cbl_errx( "%s pid %ld terminated by %s", + filter, static_cast<long>(kid), strsignal(WTERMSIG(status)) ); } if( WIFEXITED(status) ) { if( (status = WEXITSTATUS(status)) != 0 ) { diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index 99295e8db3e3..f0faaa415776 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -11409,8 +11409,8 @@ keyword_str( int token ) { switch( token ) { case YYEOF: return "YYEOF"; case YYEMPTY: return "YYEMPTY"; - case YYerror: return "YYerror"; - case YYUNDEF: return "invalid token"; + case 256: return "YYerror"; + case 257: return "invalid token"; // YYUNDEF } if( token < 256 ) { @@ -12359,7 +12359,7 @@ numstr2i( const char input[], radix_t radix ) { return output; } if( erc == -1 ) { - yywarn("'%s' was accepted as %wd", input, integer); + yywarn("'%s' was accepted as %zu", input, integer); } return output; } @@ -13141,7 +13141,7 @@ literal_subscripts_valid( YYLTYPE loc, const cbl_refer_t& name ) { // X(0): subscript 1 of for out of range for 02 X OCCURS 4 to 6 error_msg(loc, "%s(%s): subscript %zu out of range " - "for %s %s OCCURS %lu%s", + "for %s %s OCCURS %zu%s", oob->name, subscript_names.c_str(), 1 + isub, oob->level_str(), oob->name, oob->occurs.bounds.lower, upper_phrase ); diff --git a/gcc/cobol/scan_ante.h b/gcc/cobol/scan_ante.h index 037c929aff33..96b688e75128 100644 --- a/gcc/cobol/scan_ante.h +++ b/gcc/cobol/scan_ante.h @@ -824,17 +824,20 @@ wait_for_the_child(void) { } if( WIFSIGNALED(status) ) { - yywarn( "process %d terminated by %s", pid, strsignal(WTERMSIG(status)) ); + yywarn( "process %ld terminated by %s", + static_cast<long>(pid), strsignal(WTERMSIG(status)) ); return false; } if( WIFEXITED(status) ) { if( WEXITSTATUS(status) != 0 ) { - yywarn("process %d exited with status %d", pid, status); + yywarn("process %ld exited with status %d", + static_cast<long>(pid), status); return false; } } if( yy_flex_debug ) { - yywarn("process %d exited with status %d", pid, status); + yywarn("process %ld exited with status %d", + static_cast<long>(pid), status); } return true; }