On Fri, May 2, 2025 at 4:53 PM Jakub Jelinek <ja...@redhat.com> wrote: > > On Sun, Apr 06, 2025 at 03:39:27PM +0200, Jakub Jelinek wrote: > > Right now it is not possible to even build cross-compilers from 32-bit > > architectures to e.g. x86_64-linux or aarch64-linux, even from little-endian > > ones. > > > > The following patch attempts to fix that. > > > > There were various issues seen e.g. trying to build i686-linux -> > > x86_64-linux cross-compiler (so still 64-bit libgcobol, but the compiler > > is 32-bit). > > 1) warning about >> 32 shift of size_t, on 32-bit arches size_t is 32-bit > > and so the shift is UB; fixed by doing (new_size>>16)>>16 so that > > it ors in >> 32 when new_size is 64-bit and 0 when it is 32-bit > > 2) enum cbl_field_attr_t was using size_t as underlying type, but has > > various bitmasks which require full 64-bit type; changed this to uint64_t > > underlying type and using unsigned long long in the structure; various > > routines which operate with those attributes had to be changed also to > > work with uint64_t instead of size_t > > 3) on i686-linux, config.h can #define _FILE_OFFSET_BITS 64 or similar > > macros; as documented, those macros have to be defined before including > > first C library header, but some sources included cobol-system.h which > > includes config.h only after various other headers; this resulted in > > link failures, as ino_t was sometimes unsigned long and sometines > > unsigned long long, depending on whether config.h was included first or > > not, and e.g. cobol_filename uses ino_t argument > > 4) lots of places used %ld or %lx *printf format specifers with size_t > > arguments; that works only if size_t is unsigned long, but not when it > > is unsigned int or unsigned long long or some other type; now while > > ISO C99 has %zd or %zx to print size_t and C++14 includes C99 (or C11?), > > while for the C++ headers the C++ compilers typically have full control > > over it and so support everything in C++14 (e.g. libstdc++ in GCC 5.1+ > > or libc++ if not too old), for C library we are dependent on the system > > C library (note, on the host for the compiler side). And not all hosts > > support C99 in their C libraries; so instead of just changing it to > > %zd or %zx, I'm changing it to what we use elsewhere in GCC, > > HOST_SIZE_T_PRINT_{DEC,UNSIGNED,HEX_PURE} or GCC_PRISZ macros in the > > *printf family format string and casts of the size_t arguments to > > fmt_size_t. Note, if not using the C library *printf family (e.g. in > > dbgmsg, sprintf, snprintf, fprintf, etc.) but the GCC diagnostic code > > (e.g. err_msg, error, warning, yywarn, ...), then %zd/%zu is supported > > and on the other side HOST_SIZE_T_PRINT_{DEC,UNSIGNED,HEX_PURE} etc. > > macros shouldn't be used (for two reasons, because it is unnecessary > > when %zd/%zu is guaranteed to be supported there because GCC has > > control over that and more importantly because it breaks translations, > > both extraction of the to be translated strings and we don't want to > > have different messages, once with %lld, once with %ld, once with just %d > > or %I64d depending on host, translators couldn't translate it all). > > 5) see above, there were already tons of %zd/%zu or %3zu etc. format > > specifers in *printf format strings, this patch changes those too > > 6) I've noticed dbgmsg wasn't declared with printf attribute, which resulted > > in bugs where format specifiers didn't match actually passed types of > > arguments > > Here is an updated patch against latest trunk. > Maintaining the patch is a nightmare, got several dozens of rejects > that I had to deal with. > > Bootstrapped/regtested on x86_64-linux and tested with i686-linux -> > x86_64-linux cross, ok for trunk?
Any reason for unsigned long long vs. uint64_t for the following? - size_t attr; // See cbl_field_attr_t + unsigned long long attr; // See cbl_field_attr_t Otherwise LGTM. > 2025-05-02 Jakub Jelinek <ja...@redhat.com> > > PR cobol/119364 > libgcobol/ > * valconv.cc (__gg__realloc_if_necessary): Use (new_size>>16)>>16; > instead of new_size>>32; to avoid warnings on 32-bit hosts. > * common-defs.h (enum cbl_field_attr_t): Use uint64_t > as underlying type rather than size_t. > * gcobolio.h (cblc_field_t): Change attr member type from size_t > to unsigned long long. > gcc/cobol/ > * util.cc (is_numeric_edited): Use HOST_SIZE_T_PRINT_UNSIGNED > instead of "%zu" and cast corresponding argument to fmt_size_t. > (normalize_picture): Use GCC_PRISZ instead of "z" and pass address > of fmt_size_t var to sscanf and copy afterwards. > (cbl_refer_t::str): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" and cast corresponding argument > to fmt_size_t. > (struct move_corresponding_field): Likewise. > (valid_move): Likewise. > (ambiguous_reference): Likewise. > (parent_names): Likewise. > (find_corresponding::find_corresponding): Likewise. > (corresponding_fields): Likewise. > (unique_stack::push): Likewise. > (cobol_filename): Likewise. > * lexio.cc: Include config.h first. > (recognize_replacements): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" and cast corresponding argument > to fmt_size_t. > (check_source_format_directive): Likewise. > (parse_replacing_pair): Use size_t(0) instead of 0UL in span_t > construction. > (parse_replace_pairs): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead > of "%zd" and cast corresponding argument to fmt_size_t. > (parse_copy_directive): Likewise. > (parse_replace_last_off): Likewise. > (parse_replace_text): Likewise. > (bytespan_t::append): Likewise. > (cdftext::map_file): Likewise. > (cdftext::process_file): Likewise. > * symfind.cc (dump_symbol_map2): Likewise. > (dump_symbol_map_value): Likewise. > (build_symbol_map): Likewise. > (is_name::dump_key): Likewise. > (symbol_match2): Likewise. > (symbol_find): Likewise. > (symbol_find_of): Likewise. > * cdf.y: Likewise. > * symbols.cc: Include config.h first. > (cbl_field_t::set_attr): Return uint64_t rather than size_t > and replace size_t(attr) with uint64_t(attr). > (cbl_field_t::clear_attr): Likewise. > (symbol_field_capacity): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead > of "%zd" and cast corresponding argument to fmt_size_t. > (symbol_find_odo_debug): Likewise. > (symbols_dump): Likewise. > (calculate_capacity): Likewise. > (field_str): Likewise. > (symbols_update): Likewise. > (symbol_field_forward): Likewise. > (numeric_group_attrs): Return uint64_t rather than size_t and > change inherit variable to from size_t to uint64_t. > (new_literal_add): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead > of "%zd" and cast corresponding argument to fmt_size_t. > (temporaries_t::dump): Likewise. > (cbl_label_t::str): Likewise. > (symbol_label_add): Likewise. > (symbol_program_add): Likewise. > (symbol_forward_names): Likewise. > (symbol_forward_to): Likewise. > (cbl_file_key_t::deforward): Likewise. > (cbl_file_key_t::str): Likewise. > * gengen.cc (show_type): Use PRId64 instead of "ld". > (gg_unique_in_function): Use HOST_SIZE_T_PRINT_DEC instead of > %ld and cast corresponding argument to fmt_size_t. > * scan.l: Add %top section with #include "config.h". > * genmath.cc (parser_add): Use HOST_SIZE_T_PRINT_DEC instead of > %ld and cast corresponding argument to fmt_size_t. > (parser_subtract): Likewise. > * parse.y: Include "config.h" before <fstream>. Use > HOST_SIZE_T_PRINT_UNSIGNED instead of "%zu" and cast corresponding > argument to fmt_size_t. Change type of sign_attrs, group_sign and > type_implies from size_t to uint64_t. > (perform_t::ec_labels_t::new_label): Use HOST_SIZE_T_PRINT_UNSIGNED > instead of "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC > instead of "%zd" and cast corresponding argument to fmt_size_t. > (stringify_src_t::dump): Likewise. > (lang_check_failed): Likewise. > (numstr2i): Use GCC_PRISZ instead of "z" and pass address of temporary > with fmt_size_t type to sscanf and then copy it over. > (initialize_statement): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead > of "%zd" and cast corresponding argument to fmt_size_t. > (dump_inspect_oper): Likewise. > (new_literal): Likewise. > (literal_subscripts_valid): Likewise. > (eval_subject_t::label): Likewise. > * genapi.cc (level_88_helper): Likewise. > (parser_call_targets_dump): Likewise. > (combined_name): Use HOST_SIZE_T_PRINT_DEC instead of "%ld" > and cast corresponding argument to fmt_size_t. > (section_label): Likewise. > (paragraph_label): Likewise. > (leave_procedure): Likewise. > (parser_perform): Likewise. > (parser_perform_times): Likewise. > (internal_perform_through): Likewise. > (internal_perform_through_times): Likewise. > (parser_enter_program): Likewise. > (parser_init_list_size): Likewise. > (parser_init_list): Likewise. > (psa_FldLiteralN): Likewise. > (psa_FldBlob): Likewise. > (parser_assign): Likewise. > (parser_free): Pass p->field->name to dbgmsg. > (parser_division): Use HOST_SIZE_T_PRINT_DEC instead of "%ld" > and cast corresponding argument to fmt_size_t. > (perform_outofline_before_until): Likewise. > (perform_outofline_after_until): Likewise. > (perform_outofline_testafter_varying): Likewise. > (perform_outofline_before_varying): Likewise. > (perform_inline_testbefore_varying): Likewise. > (parser_inspect): Change n_operations parameter type from > unsigned long to size_t. > (parser_intrinsic_callv): Use HOST_SIZE_T_PRINT_DEC instead > of "%zd" and cast corresponding argument to fmt_size_t. > (parser_bitop): Use HOST_SIZE_T_PRINT_HEX_PURE instead of > "%lx" and cast corresponding argument to fmt_size_t. > (parser_bitwise_op): Likewise. > (parser_program_hierarchy): Use HOST_SIZE_T_PRINT_DEC instead of "%ld" > and cast corresponding argument to fmt_size_t. > (parser_set_handled): Use HOST_SIZE_T_PRINT_HEX_PURE instead of > "%lx" and cast corresponding argument to fmt_size_t. > (parser_set_numeric): Use HOST_SIZE_T_PRINT_DEC instead of "%ld" > and cast corresponding argument to fmt_size_t. > (psa_new_var_decl): Use HOST_SIZE_T_PRINT_DEC instead of "%ld" > and cast corresponding argument to fmt_size_t. > (parser_symbol_add): Use HOST_SIZE_T_PRINT_DEC instead of "%zd" > or HOST_SIZE_T_PRINT_HEX_PURE instead of "%lx" and cast corresponding > argument to fmt_size_t. > * cdf-copy.cc: Include "config.h" first. > * scan_ante.h (trim_location): Use HOST_SIZE_T_PRINT_UNSIGNED instead > of "%zu" or "%d" and cast corresponding argument to fmt_size_t. > * structs.cc (create_cblc_field_t): Use ULONGLONG instead of SIZE > for "attr". > * cbldiag.h (dbgmsg): Add ATTRIBUTE_PRINTF_1. > * gcobolspec.cc (lang_specific_driver): Use HOST_SIZE_T_PRINT_DEC > instead of "%ld" and cast corresponding argument to fmt_size_t. > * parse_ante.h (literal_of): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead > of "%zd" and cast corresponding argument to fmt_size_t. > (evaluate_elem_t::dump): Likewise. > (arith_t::another_pair): Likewise. > (current_t::end_program): Likewise. > (file_add): Likewise. > (implicit_paragraph): Likewise. > (implicit_section): Likewise. > (data_division_ready): Use HOST_SIZE_T_PRINT_DEC instead of "%d" > and cast corresponding argument to fmt_size_t. > * symbols.h (struct cbl_field_t): Change attr member type from size_t > to uint64_t. > (cbl_field_t::set_attr): Change return type from size_t to uint64_t. > (cbl_field_t::clear_attr): Likewise. > (function_descr_t::init): Use HOST_SIZE_T_PRINT_UNSIGNED instead of > "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead > of "%zd" and cast corresponding argument to fmt_size_t. > (cbl_perform_tgt_t::dump): Likewise. > (numeric_group_attrs): Change return type from size_t to uint64_t. > > --- libgcobol/valconv.cc.jj 2025-04-14 07:26:46.744879521 +0200 > +++ libgcobol/valconv.cc 2025-05-02 12:16:43.200929871 +0200 > @@ -67,7 +67,7 @@ __gg__realloc_if_necessary(char **dest, > new_size |= new_size>>4; > new_size |= new_size>>8; > new_size |= new_size>>16; > - new_size |= new_size>>32; > + new_size |= (new_size>>16)>>16; > *dest_size = new_size + 1; > *dest = (char *)realloc(*dest, *dest_size); > } > --- libgcobol/common-defs.h.jj 2025-04-10 10:02:38.979131558 +0200 > +++ libgcobol/common-defs.h 2025-05-02 12:16:43.205929804 +0200 > @@ -147,7 +147,7 @@ enum cbl_field_type_t { > * A field is padded (in the unjustified direction) either with 0 or SPC. > * (But maybe the fill character should just be an explicit character.) > */ > -enum cbl_field_attr_t : size_t { > +enum cbl_field_attr_t : uint64_t { > none_e = 0x0000000000, > figconst_1_e = 0x0000000001, // This needs to be 1 - don't change the > position > figconst_2_e = 0x0000000002, // This needs to be 2 > --- libgcobol/gcobolio.h.jj 2025-04-08 14:10:01.736300649 +0200 > +++ libgcobol/gcobolio.h 2025-05-02 12:16:43.224929551 +0200 > @@ -55,7 +55,7 @@ typedef struct cblc_field_t > struct cblc_field_t *parent;// This field's immediate parent field > size_t occurs_lower; // non-zero for a table > size_t occurs_upper; // non-zero for a table > - size_t attr; // See cbl_field_attr_t > + unsigned long long attr; // See cbl_field_attr_t > signed char type; // A one-byte copy of cbl_field_type_t > signed char level; // This variable's level in the naming > heirarchy > signed char digits; // Digits specified in PIC string; e.g. 5 > for 99v999 > --- gcc/cobol/util.cc.jj 2025-04-14 07:26:46.294886066 +0200 > +++ gcc/cobol/util.cc 2025-05-02 12:51:42.858972956 +0200 > @@ -324,8 +324,9 @@ is_numeric_edited( const char picture[] > break; > default: > numed_message = xasprintf("invalid PICTURE character " > - "'%c' at offset %zu in '%s'", > - *p, p - picture, picture); > + "'%c' at offset " HOST_SIZE_T_PRINT_UNSIGNED > + " in '%s'", > + *p, (fmt_size_t)(p - picture), picture); > break; > } > > @@ -370,10 +371,12 @@ normalize_picture( char picture[] ) > assert(pmatch[2].rm_so == pmatch[1].rm_eo + 1); // character paren > number > p = picture + pmatch[2].rm_so; > len = 0; > - if( 1 != sscanf(p, "%zu", &len) ) { > + fmt_size_t lenf = 0; > + if( 1 != sscanf(p, "%" GCC_PRISZ "u", &lenf) ) { > dbgmsg("%s:%d: no number found in '%s'", __func__, __LINE__, p); > goto irregular; > } > + len = lenf; > if( len == 0 ) { > dbgmsg("%s:%d: ZERO length found in '%s'", __func__, __LINE__, > p); > goto irregular; > @@ -985,7 +988,8 @@ cbl_refer_t::subscripts_set( const std:: > const char * > cbl_refer_t::str() const { > static char subscripts[64]; > - sprintf(subscripts, "(%u of %zu dimensions)", nsubscript, > dimensions(field)); > + sprintf(subscripts, "(%u of " HOST_SIZE_T_PRINT_UNSIGNED " dimensions)", > + nsubscript, (fmt_size_t)dimensions(field)); > char *output = xasprintf("%s %s %s", > field? field_str(field) : "(none)", > 0 < dimensions(field)? subscripts : "", > @@ -1031,10 +1035,10 @@ struct move_corresponding_field { > tgt.field = cbl_field_of(symbol_at(elem.second)); > > if( yydebug ) { > - dbgmsg("move_corresponding:%d: SRC: %3zu %s", __LINE__, > - elem.first, src.str()); > - dbgmsg("move_corresponding:%d: to %3zu %s", __LINE__, > - elem.second, tgt.str()); > + dbgmsg("move_corresponding:%d: SRC: %3" GCC_PRISZ "u %s", __LINE__, > + (fmt_size_t)elem.first, src.str()); > + dbgmsg("move_corresponding:%d: to %3" GCC_PRISZ "u %s", __LINE__, > + (fmt_size_t)elem.second, tgt.str()); > } > > parser_move(tgt, src); > @@ -1138,8 +1142,9 @@ valid_move( const struct cbl_field_t *tg > if( yydebug && ! retval ) { > auto bad = std::find_if( p, pend, > []( char ch ) { return ! ISDIGIT(ch); } ); > - dbgmsg("%s:%d: offending character '%c' at position %zu", > - __func__, __LINE__, *bad, bad - p); > + dbgmsg("%s:%d: offending character '%c' at position " > + HOST_SIZE_T_PRINT_UNSIGNED, > + __func__, __LINE__, *bad, (fmt_size_t)(bad - p)); > } > } > break; > @@ -1498,9 +1503,10 @@ ambiguous_reference( size_t program ) { > is_unique(program, proc.first) ); > if( proc.second.end() != ambiguous ) { > if( yydebug ) { > - dbgmsg("%s: %s of '%s' has %zu potential matches", __func__, > + dbgmsg("%s: %s of '%s' has " HOST_SIZE_T_PRINT_UNSIGNED > + "potential matches", __func__, > ambiguous->paragraph(), ambiguous->section(), > - procedures.count(*ambiguous)); > + (fmt_size_t)procedures.count(*ambiguous)); > } > return new procref_t(*ambiguous); > } > @@ -1543,9 +1549,9 @@ parent_names( const symbol_elem_t *elem, > > if( is_filler(cbl_field_of(elem)) ) return; > > - // dbgmsg("%s: asked about %s of %s (%zu away)", __func__, > + // dbgmsg("%s: asked about %s of %s (" HOST_SIZE_T_PRINT_UNSIGNED " > away)", __func__, > // cbl_field_of(elem)->name, > - // cbl_field_of(group)->name, elem - group); > + // cbl_field_of(group)->name, (fmt_size_t)(elem - group)); > > for( const symbol_elem_t *e=elem; e && group < e; e = symbol_parent(e) ) { > names.push_front( cbl_field_of(e)->name ); > @@ -1564,9 +1570,11 @@ public: > symbol_elem_t *rgroup, type_t type ) > : lgroup(lgroup), rgroup(rgroup), type(type) > { > - dbgmsg( "%s:%d: for #%zu %s and #%zu %s on line %d", __func__, __LINE__, > - symbol_index(lgroup), cbl_field_of(lgroup)->name, > - symbol_index(rgroup), cbl_field_of(rgroup)->name, yylineno ); > + dbgmsg( "%s:%d: for #" HOST_SIZE_T_PRINT_UNSIGNED > + " %s and #" HOST_SIZE_T_PRINT_UNSIGNED " %s on line %d", > + __func__, __LINE__, > + (fmt_size_t)symbol_index(lgroup), cbl_field_of(lgroup)->name, > + (fmt_size_t)symbol_index(rgroup), cbl_field_of(rgroup)->name, > yylineno ); > } > > static bool > @@ -1643,8 +1651,9 @@ corresponding_fields( cbl_field_t *lhs, > lhsg.a = symbols_begin(field_index(lhs)); > lhsg.z = std::find_if( lhsg.a, symbols_end(), next_group(lhsg.a) ); > > - dbgmsg("%s:%d: examining %zu symbols after %s", __func__, __LINE__, > - lhsg.z - lhsg.a, lhs->name); > + dbgmsg("%s:%d: examining " HOST_SIZE_T_PRINT_UNSIGNED " symbols after %s", > + __func__, __LINE__, > + (fmt_size_t)(lhsg.z - lhsg.a), lhs->name); > > find_corresponding finder( symbol_at(field_index(lhs)), > symbol_at(field_index(rhs)), type ); > @@ -1652,8 +1661,9 @@ corresponding_fields( cbl_field_t *lhs, > > output.erase(0); > > - dbgmsg( "%s:%d: %s and %s have %zu corresponding fields", > - __func__, __LINE__, lhs->name, rhs->name, output.size() ); > + dbgmsg( "%s:%d: %s and %s have " HOST_SIZE_T_PRINT_UNSIGNED > + " corresponding fields", > + __func__, __LINE__, lhs->name, rhs->name, > (fmt_size_t)output.size() ); > > return output; > } > @@ -1772,7 +1782,8 @@ class unique_stack : public std::stack<i > "----- ---- --------" > "----------------------------------------"); > for( const auto& v : c ) { > - dbgmsg( " %4zu %4d %s", c.size() - --n, v.lineno, no_wd(wd, > v.name) ); > + dbgmsg( " %4" GCC_PRISZ "u %4d %s", > + (fmt_size_t)(c.size() - --n), v.lineno, no_wd(wd, v.name) > ); > } > } else { > dbgmsg("unable to get current working directory: %m"); > @@ -1810,7 +1821,8 @@ bool cobol_filename( const char *name, i > auto p = old_filenames.find(name); > if( p == old_filenames.end() ) { > for( auto& elem : old_filenames ) { > - dbgmsg("%6zu %-30s", elem.second, elem.first.c_str()); > + dbgmsg("%6" GCC_PRISZ "u %-30s", > + (fmt_size_t)elem.second, elem.first.c_str()); > } > cbl_errx( "logic error: missing inode for %s", name); > } > --- gcc/cobol/lexio.cc.jj 2025-04-12 13:10:31.631523149 +0200 > +++ gcc/cobol/lexio.cc 2025-05-02 12:16:43.255929137 +0200 > @@ -28,6 +28,7 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > +#include "config.h" > #include <ext/stdio_filebuf.h> > #include "cobol-system.h" > #include "cbldiag.h" > @@ -260,9 +261,10 @@ recognize_replacements( filespan_t mfile > found = span_t( cm[1].first, cm[1].second ); > if( yy_flex_debug ) { > size_t n = count_newlines(mfile.data, found.p); > - dbgmsg("%s:%d first '%.*s' is on line %zu (offset %zu)", __func__, > __LINE__, > + dbgmsg("%s:%d first '%.*s' is on line " HOST_SIZE_T_PRINT_UNSIGNED > + " (offset " HOST_SIZE_T_PRINT_UNSIGNED ")", __func__, > __LINE__, > directive.before.size(), directive.before.p, > - ++n, found.p - mfile.data); > + (fmt_size_t)++n, (fmt_size_t)(found.p - mfile.data)); > } > } else { > dbgmsg("%s:%d not found: '%s' in \n'%.*s'", __func__, __LINE__, > @@ -290,8 +292,10 @@ recognize_replacements( filespan_t mfile > > if( yy_flex_debug ) { > size_t n = std::count((const char *)mfile.data, recognized.before.p, > '\n'); > - dbgmsg( "%s:%d: line %zu @ %zu: '%s'\n/%.*s/%.*s/", __func__, __LINE__, > - ++n, next.found.p - mfile.data, > + dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED > + " @ " HOST_SIZE_T_PRINT_UNSIGNED ": '%s'\n/%.*s/%.*s/", > + __func__, __LINE__, > + (fmt_size_t)++n, (fmt_size_t)(next.found.p - mfile.data), > next.directive.before.p, > int(recognized.before.size()), recognized.before.p, > int(recognized.after.size()), recognized.after.p ); > @@ -308,9 +312,10 @@ recognize_replacements( filespan_t mfile > next.found = span_t( cm[1].first, cm[1].second ); > size_t n = std::count((const char *)mfile.data, next.found.p, '\n'); > if( false ) > - dbgmsg("%s:%d next '%.*s' will be on line %zu (offset %zu)", > __func__, __LINE__, > + dbgmsg("%s:%d next '%.*s' will be on line " > HOST_SIZE_T_PRINT_UNSIGNED > + " (offset " HOST_SIZE_T_PRINT_UNSIGNED ")", __func__, > __LINE__, > next.directive.before.size(), next.directive.before.p, > - ++n, next.found.p - mfile.data); > + (fmt_size_t)++n, (fmt_size_t)(next.found.p - mfile.data)); > } > pnext = std::min_element(futures.begin(), futures.end()); > } > @@ -344,8 +349,10 @@ check_source_format_directive( filespan_ > break; > } > mfile.cur = const_cast<char*>(cm[0].second); > - dbgmsg( "%s:%d: %s format set, on line %zu", __func__, __LINE__, > - indicator.column == 7? "FIXED" : "FREE", mfile.lineno() ); > + dbgmsg( "%s:%d: %s format set, on line " HOST_SIZE_T_PRINT_UNSIGNED, > + __func__, __LINE__, > + indicator.column == 7? "FIXED" : "FREE", > + (fmt_size_t)mfile.lineno() ); > erase_line(const_cast<char*>(cm[0].first), > const_cast<char*>(cm[0].second)); > } > @@ -724,7 +731,7 @@ parse_replacing_pair( const char *stmt, > // This eliminated a compiler warning about "format-overflow" > yywarn("CDF syntax error"); > } > - pair.stmt = span_t(0UL, stmt); > + pair.stmt = span_t(size_t(0), stmt); > pair.replace = replace_t(); > } > return pair; > @@ -764,9 +771,9 @@ parse_replace_pairs( const char *stmt, c > // Report findings. > if( false && yy_flex_debug ) { > for( size_t i=0; i < cm.size(); i++ ) { > - dbgmsg("%s: %s %zu: '%.*s'", __func__, > + dbgmsg("%s: %s " HOST_SIZE_T_PRINT_UNSIGNED ": '%.*s'", __func__, > cm[i].matched? "Pair" : "pair", > - i, > + (fmt_size_t)i, > cm[i].matched? int(cm[i].length()) : 0, > cm[i].matched? cm[i].first : ""); > } > @@ -825,9 +832,10 @@ parse_replace_pairs( const char *stmt, c > } > > if( yy_flex_debug ) { > - dbgmsg( "%s:%d: %s: %zu pairs parsed from '%.*s'", __func__, __LINE__, > - parsed.done()? "done" : "not done", > - pairs.size(), parsed.stmt.size(), parsed.stmt.p ); > + 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 ); > int i = 0; > for( const auto& replace : pairs ) { > dbgmsg("%s:%d:%4d: '%s' => '%s'", __func__, __LINE__, > @@ -909,9 +917,10 @@ parse_copy_directive( filespan_t& mfile > if( yy_flex_debug ) { > size_t nnl = 1 + count_newlines(mfile.data, copy_stmt.p); > size_t nst = 1 + count_newlines(copy_stmt.p, copy_stmt.pend); > - dbgmsg("%s:%d: line %zu: COPY directive is %zu lines '%.*s'", > + dbgmsg("%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED > + ": COPY directive is " HOST_SIZE_T_PRINT_UNSIGNED " lines > '%.*s'", > __func__, __LINE__, > - nnl, nst, copy_stmt.size(), copy_stmt.p); > + (fmt_size_t)nnl, (fmt_size_t)nst, copy_stmt.size(), > copy_stmt.p); > } > } > } > @@ -924,7 +933,8 @@ parse_copy_directive( filespan_t& mfile > outcome.partial_line = span_t(mfile.cur, copy_stmt.p); > > if( yy_flex_debug ) { > - dbgmsg("%zu expressions", std::count(pattern, pattern + > sizeof(pattern), '(')); > + dbgmsg(HOST_SIZE_T_PRINT_UNSIGNED " expressions", > + (fmt_size_t)std::count(pattern, pattern + sizeof(pattern), > '(')); > int i = 0; > for( const auto& m : cm ) { > if( m.matched ) > @@ -1008,8 +1018,9 @@ parse_replace_last_off( filespan_t& mfil > } > } > > - dbgmsg( "%s:%d: line %zu: parsed '%.*s', ", __func__, __LINE__, > - mfile.lineno(), int(cm[0].length()), cm[0].first ); > + dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED ": parsed '%.*s', ", > + __func__, __LINE__, > + (fmt_size_t)mfile.lineno(), int(cm[0].length()), cm[0].first ); > > // Remove statement from input > erase_line(const_cast<char*>(cm[0].first), > @@ -1041,20 +1052,23 @@ parse_replace_text( filespan_t& mfile ) > gcc_assert(mfile.line_length() > 2); > if( pend[-1] == '\n' ) pend -= 2; > auto len = int(pend - mfile.cur); > - dbgmsg("%s:%d: line %zu: parsing '%.*s", __func__, __LINE__, > - current_lineno, len, mfile.cur); > + dbgmsg("%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED ": parsing '%.*s", > + __func__, __LINE__, > + (fmt_size_t)current_lineno, len, mfile.cur); > } > > if( ! regex_search(mfile.ccur(), (const char *)mfile.eodata, cm, re) ) { > - dbgmsg( "%s:%d: line %zu: not a REPLACE statement:\n'%.*s'", > - __func__, __LINE__, current_lineno, > + dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED > + ": not a REPLACE statement:\n'%.*s'", > + __func__, __LINE__, (fmt_size_t)current_lineno, > int(mfile.line_length()), mfile.cur ); > return span_t(); > } > > // Report findings. > if( yy_flex_debug ) { > - dbgmsg("%zu expressions", std::count(pattern, pattern + > sizeof(pattern), '(')); > + dbgmsg(HOST_SIZE_T_PRINT_UNSIGNED " expressions", > + (fmt_size_t)std::count(pattern, pattern + sizeof(pattern), > '(')); > int i = 0; > for( const auto& m : cm ) { > if( m.matched ) > @@ -1083,8 +1097,10 @@ parse_replace_text( filespan_t& mfile ) > replace_directives.push( replacements ); > > if( yy_flex_debug ) { > - dbgmsg( "%s:%d: line %zu: %zu pairs parsed from '%.*s'", __func__, > __LINE__, > - current_lineno, replacements.size(), int(replace_stmt.size()), > replace_stmt.p ); > + dbgmsg( "%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED ": " > HOST_SIZE_T_PRINT_UNSIGNED > + " pairs parsed from '%.*s'", __func__, __LINE__, > + (fmt_size_t)current_lineno, (fmt_size_t)replacements.size(), > + int(replace_stmt.size()), replace_stmt.p ); > for( const auto& replace : replacements ) { > int i = 0; > dbgmsg("%s:%d:%4d: '%s' => '%s'", __func__, __LINE__, > @@ -1164,8 +1180,9 @@ bytespan_t::append( const char *input, c > #if LEXIO > auto nq = std::count_if(data, eodata, isquote); > dbgmsg("%s:%3d: input ------ '%.*s'", __func__, __LINE__, int(eoinput - > input), input); > - dbgmsg("%s:%3d: precondition '%.*s' (%zu: %s)", __func__, __LINE__, > - int(size()), data, nq, in_string()? "in string" : "not in string"); > + dbgmsg("%s:%3d: precondition '%.*s' (" HOST_SIZE_T_PRINT_UNSIGNED ": %s)", > + __func__, __LINE__, > + int(size()), data, (fmt_size_t)nq, in_string()? "in string" : "not > in string"); > #endif > if( !in_string() ) { // Remove trailing space unless it's part of a > literal. > while(data < eodata && ISSPACE(eodata[-1])) eodata--; > @@ -1563,8 +1580,8 @@ cdftext::map_file( int fd ) { > cbl_err( "%s: could not prepare map file from FIFO %d", > __func__, input); > } > - if( false ) dbgmsg("%s: copied %ld bytes from FIFO", > - __func__, nout); > + if( false ) dbgmsg("%s: copied " HOST_SIZE_T_PRINT_DEC " bytes from > FIFO", > + __func__, (fmt_size_t)nout); > } > } > } while( S_ISFIFO(sb.st_mode) ); > @@ -1774,8 +1791,8 @@ cdftext::process_file( filespan_t mfile, > std::copy_if(copied.erased_lines.p, copied.erased_lines.pend, ofs, > []( char ch ) { return ch == '\n'; } ); > struct { int in, out; filespan_t mfile; } copy; > - dbgmsg("%s:%d: line %zu, opening %s on fd %d", __func__, __LINE__, > - mfile.lineno(), > + dbgmsg("%s:%d: line " HOST_SIZE_T_PRINT_UNSIGNED ", opening %s on fd > %d", > + __func__, __LINE__,mfile.lineno(), > copybook.source(), copybook.current()->fd); > copy.in = copybook.current()->fd; > copy.mfile = free_form_reference_format( copy.in ); > --- gcc/cobol/symfind.cc.jj 2025-04-12 13:10:31.705522127 +0200 > +++ gcc/cobol/symfind.cc 2025-05-02 12:51:05.248464874 +0200 > @@ -147,13 +147,14 @@ dump_symbol_map2( const field_key_t& key > > for( auto candidate : candidates ) { > char *tmp = fields; > - fields = xasprintf("%s%s %3zu", tmp? tmp : "", sep, candidate); > + fields = xasprintf("%s%s %3" GCC_PRISZ "u", > + tmp? tmp : "", sep, (fmt_size_t)candidate); > sep[0] = ','; > free(tmp); > } > > - dbgmsg( "%s:%d: %3zu %s {%s}", __func__, __LINE__, > - key.program, key.name, fields ); > + dbgmsg( "%s:%d: %3" GCC_PRISZ "u %s {%s}", __func__, __LINE__, > + (fmt_size_t)key.program, key.name, fields ); > free(fields); > } > > @@ -179,7 +180,8 @@ dump_symbol_map_value( const char name[] > > for( ; p != value.second.end(); p++ ) { > char *tmp = ancestry; > - ancestry = xasprintf("%s%s %3zu", tmp? tmp : "", sep, *p); > + ancestry = xasprintf("%s%s %3" GCC_PRISZ "u", > + tmp? tmp : "", sep, (fmt_size_t)*p); > sep[0] = ','; > free(tmp); > } > @@ -256,8 +258,11 @@ build_symbol_map() { > symbol_map.erase(sym_name_t("")); > > if( yydebug ) { > - dbgmsg( "%s:%d: %zu of %zu symbols inserted into %zu in symbol_map", > - __func__, __LINE__, nsym, end, symbol_map.size() ); > + dbgmsg( "%s:%d: " HOST_SIZE_T_PRINT_UNSIGNED " of " > + HOST_SIZE_T_PRINT_UNSIGNED " symbols inserted into " > + HOST_SIZE_T_PRINT_UNSIGNED " in symbol_map", > + __func__, __LINE__, (fmt_size_t)nsym, (fmt_size_t)end, > + (fmt_size_t)symbol_map.size() ); > } > } > > @@ -277,8 +282,8 @@ public: > } > protected: > void dump_key( const char tag[], const symbol_map_t::key_type& key ) > const { > - dbgmsg( "symbol_map key: %s { %3zu %3zu %s }", > - tag, key.program, key.parent, key.name ); > + dbgmsg( "symbol_map key: %s { %3" GCC_PRISZ "u %3" GCC_PRISZ "u %s }", > + tag, (fmt_size_t)key.program, (fmt_size_t)key.parent, key.name > ); > } > }; > > @@ -459,14 +464,16 @@ symbol_match2( size_t program, > sep = ""; > for( auto field : fields ) { > char *partial = fieldstr; > - int asret = asprintf(&fieldstr, "%s%s%zu", partial? partial : "", > sep, field); > + int asret = asprintf(&fieldstr, "%s%s" HOST_SIZE_T_PRINT_UNSIGNED, > + partial? partial : "", sep, (fmt_size_t)field); > assert(asret); > sep = ", "; > assert(fieldstr); > free(partial); > } > > - dbgmsg("%s: '%s' matches %zu fields: {%s}", __func__, ancestry, > fields.size(), fieldstr); > + dbgmsg("%s: '%s' matches " HOST_SIZE_T_PRINT_UNSIGNED " fields: {%s}", > + __func__, ancestry, (fmt_size_t)fields.size(), fieldstr); > free(fieldstr); > } > free(ancestry); > @@ -537,8 +544,8 @@ symbol_find( size_t program, std::list<c > return std::pair<symbol_elem_t *, bool>(NULL, false); > } > if( yydebug ) { > - dbgmsg( "%s:%d: '%s' has %zu possible matches", > - __func__, __LINE__, names.back(), items.size() ); > + dbgmsg( "%s:%d: '%s' has " HOST_SIZE_T_PRINT_UNSIGNED " possible > matches", > + __func__, __LINE__, names.back(), (fmt_size_t)items.size() ); > std::for_each( items.begin(), items.end(), dump_symbol_map_value1 ); > } > } > @@ -577,8 +584,8 @@ symbol_find_of( size_t program, std::lis > } > > if( yydebug ) { > - dbgmsg( "%s:%d: '%s' has %zu possible matches", > - __func__, __LINE__, names.back(), input.size() ); > + dbgmsg( "%s:%d: '%s' has " HOST_SIZE_T_PRINT_UNSIGNED " possible > matches", > + __func__, __LINE__, names.back(), (fmt_size_t)input.size() ); > std::for_each( input.begin(), input.end(), dump_symbol_map_value1 ); > } > > --- gcc/cobol/cdf.y.jj 2025-04-12 13:10:31.591523702 +0200 > +++ gcc/cobol/cdf.y 2025-05-02 12:16:43.268928963 +0200 > @@ -245,8 +245,8 @@ apply_cdf_turn( exception_turns_t& turns > %printer { fprintf(yyo, "%s '%s'", > keyword_str($$.token), > $$.string? $$.string : "<nil>" ); } <cdfarg> > -%printer { fprintf(yyo, "%ld '%s'", > - $$.number, $$.string? $$.string : "" ); } <cdfval> > +%printer { fprintf(yyo, HOST_SIZE_T_PRINT_DEC " '%s'", > + (fmt_size_t)$$.number, $$.string? $$.string : "" ); } > <cdfval> > > %type <string> NAME NUMSTR LITERAL PSEUDOTEXT > %type <string> LSUB RSUB SUBSCRIPT > @@ -828,7 +828,8 @@ defined_cmd( const char arg[] ) > > if( yydebug ) { > if( cdf_name->second.is_numeric() ) { > - dbgmsg("%s: added -D %s = %ld", __func__, name, > cdf_name->second.as_number()); > + dbgmsg("%s: added -D %s = " HOST_SIZE_T_PRINT_DEC, > + __func__, name, (fmt_size_t)cdf_name->second.as_number()); > } else { > dbgmsg("%s: added -D %s = \"%s\"", __func__, name, > cdf_name->second.string); > } > --- gcc/cobol/symbols.cc.jj 2025-04-12 13:10:31.705522127 +0200 > +++ gcc/cobol/symbols.cc 2025-05-02 12:16:43.285928736 +0200 > @@ -28,6 +28,7 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > > +#include "config.h" > #include <fstream> // Before cobol-system because it uses poisoned functions > #include "cobol-system.h" > > @@ -814,24 +815,24 @@ cbl_field_t::size() const { > return field_size(this); > } > > -size_t > +uint64_t > cbl_field_t::set_attr( cbl_field_attr_t attr ) { > if( attr == signable_e ) { > if( ! has_attr(attr) && this->var_decl_node != NULL ) { > parser_field_attr_set(this, attr); > } > } > - return this->attr |= size_t(attr); > + return this->attr |= uint64_t(attr); > } > > -size_t > +uint64_t > cbl_field_t::clear_attr( cbl_field_attr_t attr ) { > if( attr == signable_e ) { > if( this->var_decl_node != nullptr && has_attr(attr) ) { > parser_field_attr_set(this, attr, false); > } > } > - return this->attr &= ~size_t(attr); > + return this->attr &= ~uint64_t(attr); > } > > static uint32_t > @@ -1001,8 +1002,8 @@ symbol_field_capacity( const cbl_field_t > size_t size = std::accumulate( symbol_at(bog), symbol_at_impl(eog), > 0, sym_field_size::capacity ); > > - if(true) dbgmsg("%s: %02u %s.data.capacity was computed as %zu", __func__, > - field->level, field->name, size); > + if(true) dbgmsg("%s: %02u %s.data.capacity was computed as " > HOST_SIZE_T_PRINT_UNSIGNED, > + __func__, field->level, field->name, (fmt_size_t)size); > > return size; > } > @@ -1016,14 +1017,15 @@ has_odo( const symbol_elem_t& e ) { > struct cbl_field_t * > symbol_find_odo_debug( cbl_field_t * field ) { > size_t bog = field_index(field), eog = end_of_group(bog); > - dbgmsg("%s: %s is #%zu - #%zu of %zu, ends at %s", __func__, > - field->name, bog, eog, symbols.nelem, > + dbgmsg("%s: %s is #" HOST_SIZE_T_PRINT_UNSIGNED " - #" > HOST_SIZE_T_PRINT_UNSIGNED > + " of " HOST_SIZE_T_PRINT_UNSIGNED ", ends at %s", __func__, > + field->name, (fmt_size_t)bog, (fmt_size_t)eog, > (fmt_size_t)symbols.nelem, > eog == symbols.nelem? "[end]" : cbl_field_of(symbol_at(eog))->name ); > > auto e = std::find_if( symbol_at(bog), symbol_at_impl(eog, true), has_odo > ); > if( e != symbol_at_impl(eog, true) ) { > - dbgmsg("%s: %s has ODO at #%zu (return '%s')", __func__, > - field->name, symbol_index(e), > + dbgmsg("%s: %s has ODO at #" HOST_SIZE_T_PRINT_UNSIGNED " (return > '%s')", __func__, > + field->name, (fmt_size_t)symbol_index(e), > cbl_field_of(e)->name ); > } > return e == symbol_at_impl(eog, true)? NULL : cbl_field_of(e); > @@ -1047,8 +1049,8 @@ symbols_dump( size_t first, bool header > if( !yydebug ) return 0; > > if( header ) { > - fprintf(stderr, "Symbol Table has %zu elements\n", > - symbols_end() - symbols_begin()); > + fprintf(stderr, "Symbol Table has " HOST_SIZE_T_PRINT_UNSIGNED " > elements\n", > + (fmt_size_t)(symbols_end() - symbols_begin())); > } > > for( struct symbol_elem_t *e = symbols_begin(first); e < symbols_end(); > e++ ) { > @@ -1056,25 +1058,26 @@ symbols_dump( size_t first, bool header > > switch(e->type) { > case SymFilename: > - s = xasprintf("%4zu %-18s %s", e->program, > + s = xasprintf("%4" GCC_PRISZ "u %-18s %s", (fmt_size_t)e->program, > "Filename", e->elem.filename); > break; > case SymDataSection: > - s = xasprintf("%4zu %-18s line %d", e->program, > + s = xasprintf("%4" GCC_PRISZ "u %-18s line %d", (fmt_size_t)e->program, > cbl_section_of(e)->name(), cbl_section_of(e)->line); > break; > case SymFunction: > - s = xasprintf("%4zu %-15s %s", e->program, > + s = xasprintf("%4" GCC_PRISZ "u %-15s %s", (fmt_size_t)e->program, > "Function", e->elem.function.name); > break; > case SymField: { > auto field = cbl_field_of(e); > char *odo_str = NULL; > if( field->occurs.depending_on != 0 ) { > - odo_str = xasprintf("odo %zu", field->occurs.depending_on ); > + odo_str = xasprintf("odo " HOST_SIZE_T_PRINT_UNSIGNED, > + (fmt_size_t)field->occurs.depending_on ); > } > ninvalid += cbl_field_of(e)->type == FldInvalid? 1 : 0; > - s = xasprintf("%4zu %-18s %s (%s)", e->program, > + s = xasprintf("%4" GCC_PRISZ "u %-18s %s (%s)", (fmt_size_t)e->program, > cbl_field_type_str(cbl_field_of(e)->type) + 3, > field_str(cbl_field_of(e)), > odo_str? odo_str : > @@ -1082,7 +1085,7 @@ symbols_dump( size_t first, bool header > } > break; > case SymLabel: > - s = xasprintf("%4zu %-18s %s", e->program, > + s = xasprintf("%4" GCC_PRISZ "u %-18s %s", (fmt_size_t)e->program, > "Labe1l", e->elem.label.str()); > if( LblProgram == cbl_label_of(e)->type ) { > const auto& L = *cbl_label_of(e); > @@ -1094,31 +1097,35 @@ symbols_dump( size_t first, bool header > } > break; > case SymSpecial: > - s = xasprintf("%4zu %-18s id=%2d, %s", e->program, > + s = xasprintf("%4" GCC_PRISZ "u %-18s id=%2d, %s", > (fmt_size_t)e->program, > "Special", e->elem.special.id, e->elem.special.name); > break; > case SymAlphabet: > - s = xasprintf("%4zu %-18s encoding=%2d, '%s'", e->program, "Alphabet", > + s = xasprintf("%4" GCC_PRISZ "u %-18s encoding=%2d, '%s'", > + (fmt_size_t)e->program, "Alphabet", > int(e->elem.alphabet.encoding), e->elem.alphabet.name); > break; > case SymFile: > - s = xasprintf("%4zu %-18s %-20s", e->program, > + s = xasprintf("%4" GCC_PRISZ "u %-18s %-20s", > (fmt_size_t)e->program, > "File", e->elem.file.name); > { > char same_as[26] = ""; > if( cbl_file_of(e)->same_record_as > 0 ) { > - sprintf(same_as, "s%3zu", cbl_file_of(e)->same_record_as); > + sprintf(same_as, "s%3" GCC_PRISZ "u", > + (fmt_size_t)cbl_file_of(e)->same_record_as); > } > const char *type = file_org_str(e->elem.file.org); > char *part = s; > > - s = xasprintf("%s %-4s %s %s %s{%zu-%zu} status=#%zu", > + s = xasprintf("%s %-4s %s %s %s{" HOST_SIZE_T_PRINT_UNSIGNED "-" > + HOST_SIZE_T_PRINT_UNSIGNED "} status=#" > + HOST_SIZE_T_PRINT_UNSIGNED, > part, same_as, type, > e->elem.file.keys_str(), > cbl_file_of(e)->varies()? "varies " : "", > - cbl_file_of(e)->varying_size.min, > - cbl_file_of(e)->varying_size.max, > - cbl_file_of(e)->user_status); > + (fmt_size_t)cbl_file_of(e)->varying_size.min, > + (fmt_size_t)cbl_file_of(e)->varying_size.max, > + (fmt_size_t)cbl_file_of(e)->user_status); > free(part); > } > break; > @@ -1126,7 +1133,8 @@ symbols_dump( size_t first, bool header > dbgmsg("%s: cannot dump symbol type %d", __func__, e->type); > continue; > } > - fprintf(stderr, "%4zu: %s\n", e - symbols_begin(), s); > + fprintf(stderr, "%4" GCC_PRISZ "u: %s\n", > + (fmt_size_t)(e - symbols_begin()), s); > free(s); > } > return ninvalid; > @@ -1238,7 +1246,8 @@ static struct symbol_elem_t * > } > > if(yydebug && group->type != FldGroup) { > - dbgmsg("Field #%zu '%s' is not a group", symbol_index(e), group->name); > + dbgmsg("Field #" HOST_SIZE_T_PRINT_UNSIGNED " '%s' is not a group", > + (fmt_size_t)symbol_index(e), group->name); > symbols_dump(symbols.first_program, true); > } > if( group->type == FldInvalid ) return e; > @@ -1493,8 +1502,8 @@ field_str( const cbl_field_t *field ) { > for( size_t i=0; i < field->occurs.nkey; i++ ) { > updown[i] = field->occurs.keys[i].ascending? 'A' : 'D'; > } > - snprintf(name, sizeof(name), "%s[%zu]%s", > - field->name, field->occurs.ntimes(), updown.data()); > + snprintf(name, sizeof(name), "%s[" HOST_SIZE_T_PRINT_UNSIGNED "]%s", > + field->name, (fmt_size_t)field->occurs.ntimes(), > updown.data()); > } > } > > @@ -1503,7 +1512,7 @@ field_str( const cbl_field_t *field ) { > > char offset[32] = ""; > if( field->level > 1 ) { > - sprintf( offset, "off%3zu", field->offset ); > + sprintf( offset, "off%3" GCC_PRISZ "u", (fmt_size_t)field->offset ); > } > > char parredef = > @@ -1570,8 +1579,8 @@ field_str( const cbl_field_t *field ) { > }; > > pend += snprintf(pend, string + sizeof(string) - pend, > - "%c%3zu %-6s %c%c%c %2u{%3u,%u,%d = %s} (%s), line %d", > - parredef, field->parent, offset, > + "%c%3" GCC_PRISZ "u %-6s %c%c%c %2u{%3u,%u,%d = %s} (%s), > line %d", > + parredef, (fmt_size_t)field->parent, offset, > (field->attr & global_e)? 'G' : 0x20, > (field->attr & external_e)? 'E' : 0x20, > storage_type, > @@ -1796,18 +1805,19 @@ symbols_update( size_t first, bool parse > field->line, field->level_str(), field->name); > > } else { > - dbgmsg("%s: error: data item %s #%zu '%s' capacity %u rejected", > + dbgmsg("%s: error: data item %s #" HOST_SIZE_T_PRINT_UNSIGNED > + " '%s' capacity %u rejected", > __func__, > 3 + cbl_field_type_str(field->type), > - isym, field->name, field->data.capacity); > + (fmt_size_t)isym, field->name, field->data.capacity); > } > } > return 0; > } > > if(! (field->data.memsize == 0 || field_size(field) <= > field->data.memsize) ) { > - dbgmsg( "%s:%d: #%zu: invalid: %s", __func__, __LINE__, > - symbol_index(p), field_str(cbl_field_of(p)) ); > + dbgmsg( "%s:%d: #" HOST_SIZE_T_PRINT_UNSIGNED ": invalid: %s", > __func__, __LINE__, > + (fmt_size_t)symbol_index(p), field_str(cbl_field_of(p)) ); > } > assert(field->data.memsize == 0 || field_size(field) <= > field_memsize(field)); > assert( !(field->data.memsize > 0 && symbol_explicitly_redefines(field)) > ); > @@ -1925,7 +1935,8 @@ symbol_field_forward( size_t index ) { > assert( index < symbols.nelem ); > symbol_elem_t *e = symbol_at(index); > if( (e->type != SymField) ) { > - dbgmsg("%s: logic error: #%zu is %s", __func__, index, > symbol_type_str(e->type)); > + dbgmsg("%s: logic error: #" HOST_SIZE_T_PRINT_UNSIGNED " is %s", > + __func__, (fmt_size_t)index, symbol_type_str(e->type)); > } > assert(e->type == SymField); > > @@ -2433,9 +2444,9 @@ symbol_alphabet_add( size_t program, str > return symbol_add(&sym); > } > > -size_t > +uint64_t > numeric_group_attrs( const cbl_field_t *field ) { > - static const size_t inherit = signable_e | leading_e | separate_e | > big_endian_e; > + static const uint64_t inherit = signable_e | leading_e | separate_e | > big_endian_e; > static_assert(sizeof(cbl_field_t::type) < sizeof(inherit), "need bigger > type"); > assert(field); > if( field->type == FldNumericDisplay || field->type == FldGroup ) { > @@ -3258,10 +3269,10 @@ new_literal_add( const char initial[], u > > static size_t literal_count = 1; > sprintf(field->name, > - "%s%c_%zd", > + "%s%c_" HOST_SIZE_T_PRINT_DEC, > "_literal", > field->type == FldLiteralA ? 'a' : 'n', > - literal_count++); > + (fmt_size_t)literal_count++); > > return parser_symbol_add2(field); > } > @@ -3290,14 +3301,15 @@ new_literal( uint32_t len, const char in > void > temporaries_t::dump() const { > extern int yylineno; > - char *output = xasprintf("%4d: %zu Literals", yylineno, literals.size()); > + char *output = xasprintf("%4d: " HOST_SIZE_T_PRINT_UNSIGNED " Literals", > + yylineno, (fmt_size_t)literals.size()); > > for( const auto& elem : used ) { > if( ! elem.second.empty() ) { > char *so_far = output; > - output = xasprintf("%s, %zu %s", > + output = xasprintf("%s, " HOST_SIZE_T_PRINT_UNSIGNED " %s", > so_far, > - elem.second.size(), > + (fmt_size_t)elem.second.size(), > 3 + cbl_field_type_str(elem.first)); > free(so_far); > } > @@ -3580,8 +3592,8 @@ cbl_label_t::str() const { > buf = xasprintf("%-12s %s top level [%s], line %d", > type_str() + 3, name, mangled_name, line); > } else { > - buf = xasprintf("%-12s %s OF #%zu '%s' [%s], line %d", > - type_str() + 3, name, parent, > + buf = xasprintf("%-12s %s OF #" HOST_SIZE_T_PRINT_UNSIGNED " '%s' > [%s], line %d", > + type_str() + 3, name, (fmt_size_t)parent, > cbl_label_of(symbol_at(parent))->name, > mangled_name, line); > } > @@ -3695,7 +3707,8 @@ symbol_label_add( size_t program, cbl_la > // Set the program's mangled name, dehyphenated and uniqified by parent > index. > if( input->type == LblProgram ) { > char *psz = cobol_name_mangler(input->name); > - input->mangled_name = xasprintf("%s.%zu", psz, input->parent); > + input->mangled_name = xasprintf("%s." HOST_SIZE_T_PRINT_UNSIGNED, > + psz, (fmt_size_t)input->parent); > free(psz); > } > > @@ -3764,7 +3777,8 @@ symbol_program_add( size_t program, cbl_ > > // Set the program's mangled name, dehyphenated and uniqified by parent > index. > char *psz = cobol_name_mangler(input->name); > - elem.elem.label.mangled_name = xasprintf("%s.%zu", psz, input->parent); > + elem.elem.label.mangled_name = xasprintf("%s." HOST_SIZE_T_PRINT_UNSIGNED, > + psz, (fmt_size_t)input->parent); > free(psz); > > e = std::find_if( symbols_begin(program), symbols_end(), > @@ -4445,8 +4459,8 @@ symbol_forward_names( size_t ifield ) { > for( auto sym = symbols_begin(ifield); sym && sym->type == SymField; ) { > const cbl_field_t *field = cbl_field_of(sym); > if( !(field->type == FldForward) ) { > - dbgmsg("%s:%d: logic error, not FldForward: #%zu %s", > - __func__, __LINE__, symbol_index(sym), field_str(field)); > + dbgmsg("%s:%d: logic error, not FldForward: #" > HOST_SIZE_T_PRINT_UNSIGNED " %s", > + __func__, __LINE__, (fmt_size_t)symbol_index(sym), > field_str(field)); > } > assert(field->type == FldForward); > > @@ -4469,8 +4483,9 @@ symbol_forward_to( size_t fwd ) { > if( !elem.second ) { > const auto& field = *cbl_field_of(symbols_begin(fwd)); > if( yydebug ) > - dbgmsg("%s:%d: no symbol found for #%zu %s %s", __func__, __LINE__, > - fwd, cbl_field_type_str(field.type), field.name); > + dbgmsg("%s:%d: no symbol found for #" HOST_SIZE_T_PRINT_UNSIGNED " %s > %s", > + __func__, __LINE__, > + (fmt_size_t)fwd, cbl_field_type_str(field.type), field.name); > return fwd; > } > > @@ -4491,8 +4506,9 @@ cbl_file_key_t::deforward( size_t ifile > const auto field = cbl_field_of(symbol_at(ifield)); > > if( is_forward(field) && yydebug ) { > - dbgmsg("%s:%d: key %d: #%zu %s of %s is %s", > "deforward", __LINE__, > - keys[ifile]++, ifield, field->name, file->name, > + dbgmsg("%s:%d: key %d: #" HOST_SIZE_T_PRINT_UNSIGNED " > %s of %s is %s", > + "deforward", __LINE__, > + keys[ifile]++, (fmt_size_t)ifield, field->name, > file->name, > cbl_field_type_str(field->type) + 3); > } > > @@ -4546,7 +4562,7 @@ cbl_file_key_t::str() const { > > *p++ = '['; > for( auto f = fields; f < fields + nfield; f++) { > - auto n = sprintf(p, "%s%zu", sep, *f); > + auto n = sprintf(p, "%s" HOST_SIZE_T_PRINT_UNSIGNED, sep, > (fmt_size_t)*f); > p += n; > sep = ", "; > } > --- gcc/cobol/gengen.cc.jj 2025-04-08 15:51:11.954929158 +0200 > +++ gcc/cobol/gengen.cc 2025-05-02 12:16:43.304928483 +0200 > @@ -393,13 +393,13 @@ show_type(tree type) > > case REAL_TYPE: > sprintf(ach, > - "%3ld-bit REAL", > + "%3" PRId64 "-bit REAL", > TREE_INT_CST_LOW(TYPE_SIZE(type))); > break; > > case INTEGER_TYPE: > sprintf(ach, > - "%3ld-bit %s INT", > + "%3" PRId64 "-bit %s INT", > TREE_INT_CST_LOW(TYPE_SIZE(type)), > (TYPE_UNSIGNED(type) ? "unsigned" : " signed")); > break; > @@ -892,7 +892,8 @@ gg_unique_in_function(const char *var_na > char *retval = (char *)xmalloc(strlen(var_name)+32); > if( (vs_scope == vs_stack || vs_scope == vs_static) ) > { > - sprintf(retval, "%s.%ld", var_name, current_function->program_id_number); > + sprintf(retval, "%s." HOST_SIZE_T_PRINT_DEC, var_name, > + (fmt_size_t)current_function->program_id_number); > } > else > { > --- gcc/cobol/scan.l.jj 2025-04-14 07:26:46.273886371 +0200 > +++ gcc/cobol/scan.l 2025-05-02 12:16:43.316928322 +0200 > @@ -27,6 +27,9 @@ > * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > +%top{ > +#include "config.h" > +} > %{ > #include <fstream> // Before cobol-system because it uses poisoned functions > #include "cobol-system.h" > --- gcc/cobol/genmath.cc.jj 2025-04-08 14:08:48.651318060 +0200 > +++ gcc/cobol/genmath.cc 2025-05-02 12:16:43.333928096 +0200 > @@ -725,7 +725,7 @@ parser_add( size_t nC, cbl_num_result_t > SHOW_PARSE > { > SHOW_PARSE_HEADER > - fprintf(stderr, " A[%ld]:", nA); > + fprintf(stderr, " A[" HOST_SIZE_T_PRINT_DEC "]:", (fmt_size_t)nA); > for(size_t i=0; i<nA; i++) > { > if(i > 0) > @@ -737,7 +737,7 @@ parser_add( size_t nC, cbl_num_result_t > > fprintf(stderr, "%s", format==giving_e? " GIVING" : ""); > > - fprintf(stderr, " C[%ld]:", nC); > + fprintf(stderr, " C[" HOST_SIZE_T_PRINT_DEC "]:", (fmt_size_t)nC); > for(size_t i=0; i<nC; i++) > { > if(i > 0) > @@ -1412,7 +1412,7 @@ parser_subtract(size_t nC, cbl_num_resul > SHOW_PARSE > { > SHOW_PARSE_HEADER > - fprintf(stderr, " A[%ld]:", nA); > + fprintf(stderr, " A[" HOST_SIZE_T_PRINT_DEC "]:", (fmt_size_t)nA); > for(size_t i=0; i<nA; i++) > { > if(i > 0) > @@ -1422,7 +1422,7 @@ parser_subtract(size_t nC, cbl_num_resul > fprintf(stderr, "%s", A[i].field->name); > } > > - fprintf(stderr, " B[%ld]:", nB); > + fprintf(stderr, " B[" HOST_SIZE_T_PRINT_DEC "]:", (fmt_size_t)nB); > for(size_t i=0; i<nB; i++) > { > if(i > 0) > @@ -1432,7 +1432,7 @@ parser_subtract(size_t nC, cbl_num_resul > fprintf(stderr, "%s", B[i].field->name); > } > > - fprintf(stderr, " C[%ld]:", nC); > + fprintf(stderr, " C[" HOST_SIZE_T_PRINT_DEC "]:", (fmt_size_t)nC); > for(size_t i=0; i<nC; i++) > { > if(i > 0) > --- gcc/cobol/parse.y.jj 2025-04-14 07:26:46.260886560 +0200 > +++ gcc/cobol/parse.y 2025-05-02 12:16:43.367927642 +0200 > @@ -28,6 +28,7 @@ > * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > %code requires { > + #include "config.h" > #include <fstream> // Before cobol-system because it uses poisoned > functions > #include "cobol-system.h" > #include "coretypes.h" > @@ -279,6 +280,7 @@ > } > > %{ > +#include "config.h" > #include <fstream> // Before cobol-system because it uses poisoned functions > #include "cobol-system.h" > #include "coretypes.h" > @@ -945,18 +947,20 @@ > > %printer { fprintf(yyo, "%s (token %d)", keyword_str($$), $$ ); } relop > %printer { fprintf(yyo, "'%s'", $$? $$ : "" ); } NAME <string> > -%printer { fprintf(yyo, "%s'%.*s'{%zu} %s", $$.prefix, int($$.len), $$.data, > $$.len, > +%printer { fprintf(yyo, "%s'%.*s'{" HOST_SIZE_T_PRINT_UNSIGNED "} %s", > + $$.prefix, int($$.len), $$.data, (fmt_size_t)$$.len, > $$.symbol_name()); } <literal> > -%printer { fprintf(yyo, "%s (1st of %zu)", > +%printer { fprintf(yyo, "%s (1st of " HOST_SIZE_T_PRINT_UNSIGNED ")", > $$->targets.empty()? "" : > $$->targets.front().refer.field->name, > - $$->targets.size() ); } <targets> > -%printer { fprintf(yyo, "#%zu: %s", > - is_temporary($$)? 0 : field_index($$), > + (fmt_size_t)$$->targets.size() ); } <targets> > +%printer { fprintf(yyo, "#" HOST_SIZE_T_PRINT_UNSIGNED ": %s", > + is_temporary($$)? 0 : (fmt_size_t)field_index($$), > $$? name_of($$) : "<nil>" ); } name > -%printer { fprintf(yyo, "{%zu-%zu}", $$.min, $$.max ); } <min_max> > +%printer { fprintf(yyo, "{" HOST_SIZE_T_PRINT_UNSIGNED "-" > HOST_SIZE_T_PRINT_UNSIGNED "}", > + (fmt_size_t)$$.min, (fmt_size_t)$$.max ); } <min_max> > %printer { fprintf(yyo, "{%s}", $$? "+/-" : "" ); } signed > -%printer { fprintf(yyo, "{%s of %zu}", > - teed_up_names().front(), teed_up_names().size() ); } > qname > +%printer { fprintf(yyo, "{%s of " HOST_SIZE_T_PRINT_UNSIGNED "}", > + teed_up_names().front(), (fmt_size_t) > teed_up_names().size() ); } qname > %printer { fprintf(yyo, "{%d}", $$ ); } <number> > %printer { fprintf(yyo, "'%s'", $$.string ); } <numstr> > %printer { const char *s = string_of($$); > @@ -968,9 +972,9 @@ > $$.low? (const char*) $$.low : "", > $$.high? (const char*) $$.high : "", > $$.also? "+" : "" ); } <colseq> > -%printer { fprintf(yyo, "{%s, %zu parameters}", > +%printer { fprintf(yyo, "{%s, " HOST_SIZE_T_PRINT_UNSIGNED " parameters}", > name_of($$.ffi_name->field), !$$.using_params? 0 : > - $$.using_params->elems.size()); } call_body > + (fmt_size_t)$$.using_params->elems.size()); } > call_body > %printer { fprintf(yyo, "%s <- %s", data_category_str($$.category), > name_of($$.replacement->field)); } > init_by > > @@ -3616,12 +3620,12 @@ data_descr1: level_name > > // SIGN clause valid only with "S" in picture > if( $field->type == FldNumericDisplay && > !is_signable($field) ) { > - static const size_t sign_attrs = leading_e | separate_e; > + static const uint64_t sign_attrs = leading_e | > separate_e; > static_assert(sizeof(sign_attrs) == sizeof($field->attr), > "size matters"); > > // remove inapplicable inherited sign attributes > - size_t group_sign = group_attr($field) & sign_attrs; > + uint64_t group_sign = group_attr($field) & sign_attrs; > $field->attr &= ~group_sign; > > if( $field->attr & sign_attrs ) { > @@ -3777,7 +3781,7 @@ data_clauses: data_clause > > // If any implied TYPE bits are on in addition to > // type_clause_e, they're in conflict. > - static const size_t type_implies = > + static const uint64_t type_implies = > // ALIGNED clause not implemented > blank_zero_clause_e | justified_clause_e | > picture_clause_e > | sign_clause_e | synched_clause_e | usage_clause_e; > @@ -4278,8 +4282,9 @@ usage_clause1: usage COMPUTATIONAL[comp > is_numeric(redefined->type) && redefined->size() == 4) > { > // For now, we allow POINTER to expand a 32-bit item to > 64 bits. > field->data.capacity = int_size_in_bytes(ptr_type_node); > - dbgmsg("%s: expanding #%zu %s capacity %u => %u", > __func__, > - field_index(redefined), redefined->name, > + dbgmsg("%s: expanding #" HOST_SIZE_T_PRINT_UNSIGNED > + " %s capacity %u => %u", __func__, > + (fmt_size_t)field_index(redefined), > redefined->name, > redefined->data.capacity, field->data.capacity); > > redefined->embiggen(); > @@ -4533,7 +4538,7 @@ sign_clause: sign_is sign_leading sig > if( $sign_leading ) { > field->attr |= leading_e; > } else { > - field->attr &= ~size_t(leading_e); // turn off in case > inherited > + field->attr &= ~uint64_t(leading_e); // turn off in case > inherited > field->attr |= signable_e; > } > if( $sign_separate ) field->attr |= separate_e; > @@ -11399,7 +11404,7 @@ perform_t::ec_labels_t::new_label( cbl_l > { > size_t n = 1 + symbols_end() - symbols_begin(); > cbl_name_t name; > - sprintf(name, "_perf_%s_%zu", role, n); > + sprintf(name, "_perf_%s_" HOST_SIZE_T_PRINT_UNSIGNED, role, (fmt_size_t)n); > return label_add( type, name, yylineno ); > } > > @@ -11714,8 +11719,8 @@ struct stringify_src_t : public cbl_stri > } > > static void dump( const cbl_string_src_t& src ) { > - dbgmsg( "%s:%d:, %zu inputs delimited by %s:", __func__, __LINE__, > - src.ninput, > + dbgmsg( "%s:%d:, " HOST_SIZE_T_PRINT_UNSIGNED " inputs delimited by %s:", > + __func__, __LINE__, (fmt_size_t)src.ninput, > src.delimited_by.field? field_str(src.delimited_by.field) : > "SIZE" ); > std::for_each(src.inputs, src.inputs + src.ninput, dump_input); > } > @@ -11864,8 +11869,8 @@ lang_check_failed (const char* file, int > > void ast_inspect( cbl_refer_t& input, bool backward, ast_inspect_list_t& > inspects ) { > if( yydebug ) { > - dbgmsg("%s:%d: INSPECT %zu operations on %s, line %d", __func__, > __LINE__, > - inspects.size(), input.field->name, yylineno); > + dbgmsg("%s:%d: INSPECT " HOST_SIZE_T_PRINT_UNSIGNED " operations on %s, > line %d", > + __func__, __LINE__, (fmt_size_t)inspects.size(), > input.field->name, yylineno); > } > std::for_each(inspects.begin(), inspects.end(), dump_inspect); > auto array = inspects.as_array(); > @@ -12006,6 +12011,7 @@ static REAL_VALUE_TYPE > numstr2i( const char input[], radix_t radix ) { > REAL_VALUE_TYPE output; > size_t integer = 0; > + fmt_size_t integerf = 0; > int erc=0; > > switch( radix ) { > @@ -12017,7 +12023,8 @@ numstr2i( const char input[], radix_t ra > } > break; > case hexadecimal_e: > - erc = sscanf(input, "%zx", &integer); > + erc = sscanf(input, "%" GCC_PRISZ "x", &integerf); > + integer = integer; > real_from_integer (&output, VOIDmode, integer, UNSIGNED); > break; > case boolean_e: > @@ -12445,9 +12452,11 @@ initialize_statement( std::list<cbl_num_ > > static void > dump_inspect_oper( const cbl_inspect_oper_t& op ) { > - dbgmsg("\t%s: %zu \"matches\", %zu \"replaces\"", > + dbgmsg("\t%s: " HOST_SIZE_T_PRINT_UNSIGNED > + " \"matches\", " HOST_SIZE_T_PRINT_UNSIGNED " \"replaces\"", > bound_str(op.bound), > - op.matches? op.n_identifier_3 : 0, op.replaces? op.n_identifier_3 : > 0); > + op.matches? (fmt_size_t)op.n_identifier_3 : 0, > + op.replaces? (fmt_size_t)op.n_identifier_3 : 0); > if( op.matches ) > std::for_each(op.matches, op.matches + op.n_identifier_3, > dump_inspect_match); > if( op.replaces ) > @@ -12535,10 +12544,11 @@ cbl_field_t * > new_literal( const literal_t& lit, enum cbl_field_attr_t attr ) { > bool zstring = lit.prefix[0] == 'Z'; > if( !zstring && lit.data[lit.len] != '\0' ) { > - dbgmsg("%s:%d: line %d, no NUL terminator '%-*.*s'{%zu/%zu}", > + dbgmsg("%s:%d: line %d, no NUL terminator '%-*.*s'{" > + HOST_SIZE_T_PRINT_UNSIGNED "/" HOST_SIZE_T_PRINT_UNSIGNED "}", > __func__, __LINE__, yylineno, > int(lit.len), int(lit.len), > - lit.data, strlen(lit.data), lit.len); > + lit.data, (fmt_size_t)strlen(lit.data), (fmt_size_t)lit.len); > } > assert(zstring || lit.data[lit.len] == '\0'); > > @@ -12781,7 +12791,8 @@ literal_subscripts_valid( YYLTYPE loc, c > const char *upper_phrase = ""; > if( ! oob->occurs.bounds.fixed_size() ) { > static char ub[32] = "boo"; > - sprintf(ub, " to %lu", oob->occurs.bounds.upper); > + sprintf(ub, " to " HOST_SIZE_T_PRINT_UNSIGNED, > + (fmt_size_t)oob->occurs.bounds.upper); > upper_phrase = ub; > } > > @@ -12851,7 +12862,8 @@ eval_subject_t::label( const char skel[] > cbl_label_t label = protolabel; > label.line = yylineno; > size_t n = 1 + symbols_end() - symbols_begin(); > - snprintf(label.name, sizeof(label.name), "_eval_%s_%zu", skel, n); > + snprintf(label.name, sizeof(label.name), > + "_eval_%s_" HOST_SIZE_T_PRINT_UNSIGNED, skel, (fmt_size_t)n); > auto output = symbol_label_add( PROGRAM, &label ); > return output; > } > --- gcc/cobol/genapi.cc.jj 2025-04-24 23:44:00.111196021 +0200 > +++ gcc/cobol/genapi.cc 2025-05-02 12:28:18.249651309 +0200 > @@ -427,7 +427,8 @@ level_88_helper(size_t parent_capacity, > nbuild += first_name_length; > } > } > - returned_size = sprintf(retval, "%zdA", nbuild); > + returned_size = sprintf(retval, HOST_SIZE_T_PRINT_DEC "A", > + (fmt_size_t)nbuild); > memcpy(retval + returned_size, builder, nbuild); > returned_size += nbuild; > free(first_name); > @@ -735,12 +736,14 @@ parser_call_target_convention( tree func > void > parser_call_targets_dump() > { > - dbgmsg( "call targets for #%zu", current_program_index() ); > + dbgmsg( "call targets for #" HOST_SIZE_T_PRINT_UNSIGNED, > + (fmt_size_t)current_program_index() ); > for( const auto& elem : call_targets ) { > const auto& k = elem.first; > const auto& v = elem.second; > - fprintf(stderr, "\t#%-3zu %s calls %s ", > - k.caller, cbl_label_of(symbol_at(k.caller))->name, k.called); > + fprintf(stderr, "\t#%-3" GCC_PRISZ "u %s calls %s ", > + (fmt_size_t)k.caller, cbl_label_of(symbol_at(k.caller))->name, > + k.called); > char ch = '['; > for( auto func : v ) { > fprintf( stderr, "%c %s", ch, > IDENTIFIER_POINTER(DECL_NAME(func.node)) ); > @@ -2343,9 +2346,11 @@ combined_name(cbl_label_t *label) > { > strcat(retval, mangled_program_name); > } > - sprintf(ach, ".%ld", current_function->program_id_number); > + sprintf(ach, "." HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)current_function->program_id_number); > strcat(retval, ach); > - sprintf(ach, ".%ld", symbol_label_id(label)); > + sprintf(ach, "." HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)symbol_label_id(label)); > strcat(retval, ach); > free(mangled_program_name); > free(section); > @@ -2391,11 +2396,11 @@ section_label(struct cbl_proc_t *procedu > > cbl_label_t *label = procedure->label; > // The _initialize_program section isn't relevant. > - char *psz = xasprintf("%s SECTION %s in %s (%ld)", > + char *psz = xasprintf("%s SECTION %s in %s (" HOST_SIZE_T_PRINT_DEC ")", > ASM_COMMENT_START, > label->name, > current_function->our_unmangled_name, > - deconflictor); > + (fmt_size_t)deconflictor); > gg_insert_into_assembler(psz); > free(psz); > > @@ -2443,12 +2448,12 @@ paragraph_label(struct cbl_proc_t *proce > > char *psz1 = > xasprintf( > - "%s PARAGRAPH %s of %s in %s (%ld)", > + "%s PARAGRAPH %s of %s in %s (" HOST_SIZE_T_PRINT_DEC ")", > ASM_COMMENT_START, > para_name ? para_name: "" , > section_name ? section_name: "(null)" , > current_function->our_unmangled_name ? > current_function->our_unmangled_name: "" , > - deconflictor ); > + (fmt_size_t)deconflictor ); > > gg_insert_into_assembler(psz1); > > @@ -2560,8 +2565,8 @@ leave_procedure(struct cbl_proc_t *proce > gg_append_statement(procedure->exit.label); > > char *psz; > - psz = xasprintf("_procret.%ld:", > - symbol_label_id(procedure->label)); > + psz = xasprintf("_procret." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)symbol_label_id(procedure->label)); > gg_insert_into_assembler(psz); > free(psz); > pseudo_return_pop(procedure); > @@ -3042,12 +3047,12 @@ parser_perform(cbl_label_t *label, bool > para_name = label->name; > sect_name = section_label->name; > sprintf(ach, > - "%s PERFORM %s of %s of %s (%ld)", > + "%s PERFORM %s of %s of %s (" HOST_SIZE_T_PRINT_DEC ")", > ASM_COMMENT_START, > para_name, > sect_name, > program_name, > - deconflictor); > + (fmt_size_t)deconflictor); > > gg_insert_into_assembler(ach); > } > @@ -3055,19 +3060,19 @@ parser_perform(cbl_label_t *label, bool > { > sect_name = label->name; > sprintf(ach, > - "%s PERFORM %s of %s (%ld)", > + "%s PERFORM %s of %s (" HOST_SIZE_T_PRINT_DEC ")", > ASM_COMMENT_START, > sect_name, > program_name, > - deconflictor); > + (fmt_size_t)deconflictor); > gg_insert_into_assembler(ach); > } > > if( !suppress_nexting ) > { > sprintf(ach, > - "_proccall.%ld.%d:", > - symbol_label_id(label), > + "_proccall." HOST_SIZE_T_PRINT_DEC ".%d:", > + (fmt_size_t)symbol_label_id(label), > call_counter++); > gg_insert_into_assembler( ach ); > } > @@ -3115,8 +3120,8 @@ parser_perform_times( cbl_label_t *proc_ > char ach[256]; > size_t our_pseudo_label = pseudo_label++; > sprintf(ach, > - "_proccallb.%ld:", > - our_pseudo_label); > + "_proccallb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > > tree counter = gg_define_variable(LONG); > @@ -3137,8 +3142,8 @@ parser_perform_times( cbl_label_t *proc_ > WEND > > sprintf(ach, > - "_procretb.%ld:", > - our_pseudo_label); > + "_procretb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler(ach); > } > > @@ -3215,8 +3220,8 @@ internal_perform_through( cbl_label_t *p > { > char ach[256]; > sprintf(ach, > - "_proccall.%ld.%d:", > - symbol_label_id(proc_2), > + "_proccall." HOST_SIZE_T_PRINT_DEC ".%d:", > + (fmt_size_t)symbol_label_id(proc_2), > call_counter++); > gg_insert_into_assembler(ach); > } > @@ -3265,8 +3270,8 @@ internal_perform_through_times( cbl_la > > char ach[256]; > sprintf(ach, > - "_proccallb.%ld:", > - our_pseudo_label); > + "_proccallb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > > tree counter = gg_define_variable(LONG); > @@ -3282,8 +3287,8 @@ internal_perform_through_times( cbl_la > WEND > > sprintf(ach, > - "_procretb.%ld:", > - our_pseudo_label); > + "_procretb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > } > > @@ -3594,7 +3599,8 @@ parser_enter_program( const char *funcna > if( parent_index ) > { > // This is a nested function. Tack on the parent_index to the end of it. > - sprintf(funcname, "%s.%ld", mangled_name, parent_index); > + sprintf(funcname, "%s." HOST_SIZE_T_PRINT_DEC, mangled_name, > + (fmt_size_t)parent_index); > } > else > { > @@ -3760,8 +3766,8 @@ parser_init_list_size(int count_of_varia > vti_list_size = count_of_variables; > char ach[48]; > sprintf(ach, > - "..variables_to_init_%ld", > - current_function->our_symbol_table_index); > + "..variables_to_init_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)current_function->our_symbol_table_index); > tree array_of_variables_type = build_array_type_nelts(VOID_P, > > count_of_variables+1); > vti_array = gg_define_variable( array_of_variables_type, > @@ -3799,8 +3805,8 @@ parser_init_list() > > char ach[48]; > sprintf(ach, > - "..variables_to_init_%ld", > - current_function->our_symbol_table_index); > + "..variables_to_init_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)current_function->our_symbol_table_index); > tree array = gg_trans_unit_var_decl(ach); > gg_call(VOID, > "__gg__variables_to_init", > @@ -3981,7 +3987,7 @@ psa_FldLiteralN(struct cbl_field_t *fiel > > static size_t our_index = 0; > > - sprintf(id_string, ".%ld", ++our_index); > + sprintf(id_string, "." HOST_SIZE_T_PRINT_DEC, (fmt_size_t)++our_index); > strcpy(base_name, field->name); > strcat(base_name, id_string); > > @@ -4018,7 +4024,7 @@ psa_FldBlob(struct cbl_field_t *var ) > > static size_t our_index = 0; > > - sprintf(id_string, ".%ld", ++our_index); > + sprintf(id_string, "." HOST_SIZE_T_PRINT_DEC, (fmt_size_t)++our_index); > strcpy(base_name, var->name); > strcat(base_name, id_string); > > @@ -5089,7 +5095,8 @@ parser_assign( size_t nC, cbl_num_result > { > TRACE1_HEADER > char ach[32]; > - sprintf(ach, "%ld target%s", nC, nC==1 ? "" : "s"); > + sprintf(ach, HOST_SIZE_T_PRINT_DEC " target%s", > + (fmt_size_t)nC, nC==1 ? "" : "s"); > TRACE1_TEXT(ach); > if( on_error ) > { > @@ -5108,7 +5115,8 @@ parser_assign( size_t nC, cbl_num_result > TRACE1 > { > char ach[48]; > - sprintf(ach, "Processing target number %ld", i); > + sprintf(ach, "Processing target number " HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)i); > TRACE1_INDENT > TRACE1_TEXT(ach); > } > @@ -6162,7 +6170,8 @@ parser_free( size_t n, cbl_refer_t refer > gcc_assert( ! p->is_refmod_reference() ); > if( !(p->field->type == FldPointer || p->addr_of || (p->field->attr & > based_e)) ) > { > - dbgmsg("Deallocating %s means it has to be FldPointer or addr_of or > based_e"); > + dbgmsg("Deallocating %s means it has to be FldPointer or addr_of or > based_e", > + p->field->name); > } > gcc_assert( p->field->type == FldPointer || p->addr_of || > (p->field->attr & based_e) ); > > @@ -6436,8 +6445,8 @@ parser_division(cbl_division_t division, > // We need a pointer to the array of program names > char ach[2*sizeof(cbl_name_t)]; > sprintf(ach, > - "..accessible_program_list_%ld", > - current_function->our_symbol_table_index); > + "..accessible_program_list_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)current_function->our_symbol_table_index); > tree prog_list = gg_define_variable(build_pointer_type(CHAR_P), > ach, vs_file_static); > > @@ -6449,8 +6458,8 @@ parser_division(cbl_division_t division, > tree pointer_type = build_pointer_type(function_type); > tree constructed_array_type = build_array_type_nelts(pointer_type, 1); > sprintf(ach, > - "..accessible_program_pointers_%ld", > - current_function->our_symbol_table_index); > + "..accessible_program_pointers_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)current_function->our_symbol_table_index); > tree prog_pointers = gg_define_variable( > > build_pointer_type(constructed_array_type), > ach, > @@ -7753,8 +7762,8 @@ perform_outofline_before_until(struct cb > char ach[256]; > size_t our_pseudo_label = pseudo_label++; > sprintf(ach, > - "_proccallb.%ld:", > - our_pseudo_label); > + "_proccallb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > > parser_if(varys[0].until); > @@ -7776,8 +7785,8 @@ perform_outofline_before_until(struct cb > // Label the bottom of the PERFORM > gg_append_statement( tgt->addresses.exit.label ); > sprintf(ach, > - "_procretb.%ld:", > - our_pseudo_label); > + "_procretb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > } > > @@ -7808,8 +7817,8 @@ perform_outofline_after_until(struct cbl > char ach[256]; > size_t our_pseudo_label = pseudo_label++; > sprintf(ach, > - "_proccallb.%ld:", > - our_pseudo_label); > + "_proccallb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > > create_iline_address_pairs(tgt); > @@ -7839,8 +7848,8 @@ perform_outofline_after_until(struct cbl > // Label the bottom of the PERFORM > gg_append_statement( tgt->addresses.exit.label ); > sprintf(ach, > - "_procretb.%ld:", > - our_pseudo_label); > + "_procretb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > } > > @@ -7904,8 +7913,8 @@ perform_outofline_testafter_varying(stru > char ach[256]; > size_t our_pseudo_label = pseudo_label++; > sprintf(ach, > - "_proccallb.%ld:", > - our_pseudo_label); > + "_proccallb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > > create_iline_address_pairs(tgt); > @@ -7959,8 +7968,8 @@ perform_outofline_testafter_varying(stru > // Arriving here means that we all of the conditions were > // true. So, we're done. > sprintf(ach, > - "_procretb.%ld:", > - our_pseudo_label); > + "_procretb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > } > > @@ -8021,8 +8030,8 @@ perform_outofline_before_varying( stru > char ach[256]; > size_t our_pseudo_label = pseudo_label++; > sprintf(ach, > - "_proccallb.%ld:", > - our_pseudo_label); > + "_proccallb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > > // Initialize all varying: > @@ -8102,8 +8111,8 @@ perform_outofline_before_varying( stru > // We have, you see, reached the egress: > gg_append_statement( tgt->addresses.exit.label ); > sprintf(ach, > - "_procretb.%ld:", > - our_pseudo_label); > + "_procretb." HOST_SIZE_T_PRINT_DEC ":", > + (fmt_size_t)our_pseudo_label); > gg_insert_into_assembler( ach ); > } > > @@ -8310,7 +8319,7 @@ perform_inline_testbefore_varying( stru > { > SHOW_PARSE_INDENT > char ach[32]; > - sprintf(ach, "LABEL [%ld]:", i); > + sprintf(ach, "LABEL [" HOST_SIZE_T_PRINT_DEC "]:", (fmt_size_t)i); > SHOW_PARSE_TEXT(ach) > SHOW_PARSE_END > } > @@ -8321,7 +8330,8 @@ perform_inline_testbefore_varying( stru > { > SHOW_PARSE_INDENT > char ach[32]; > - sprintf(ach, "LABEL CONDINTO[%ld]:", i); > + sprintf(ach, "LABEL CONDINTO[" HOST_SIZE_T_PRINT_DEC "]:", > + (fmt_size_t)i); > SHOW_PARSE_TEXT(ach) > SHOW_PARSE_END > } > @@ -8332,7 +8342,8 @@ perform_inline_testbefore_varying( stru > { > SHOW_PARSE_INDENT > char ach[32]; > - sprintf(ach, "LABEL CONDBACK[%ld]:", i); > + sprintf(ach, "LABEL CONDBACK[" HOST_SIZE_T_PRINT_DEC "]:", > + (fmt_size_t)i); > SHOW_PARSE_TEXT(ach) > SHOW_PARSE_END > } > @@ -8367,7 +8378,8 @@ perform_inline_testbefore_varying( stru > { > SHOW_PARSE_INDENT > char ach[32]; > - sprintf(ach, "GOTO [%ld]:", i-1); > + sprintf(ach, "GOTO [" HOST_SIZE_T_PRINT_DEC "]:", > + (fmt_size_t)(i-1)); > SHOW_PARSE_TEXT(ach) > SHOW_PARSE_END > } > @@ -8401,7 +8413,8 @@ perform_inline_testbefore_varying( stru > { > SHOW_PARSE_INDENT > char ach[32]; > - sprintf(ach, "GOTO [%ld]:", N-1); > + sprintf(ach, "GOTO [" HOST_SIZE_T_PRINT_DEC "]:", > + (fmt_size_t)(N-1)); > SHOW_PARSE_TEXT(ach) > SHOW_PARSE_END > } > @@ -8418,7 +8431,8 @@ perform_inline_testbefore_varying( stru > { > SHOW_PARSE_INDENT > char ach[32]; > - sprintf(ach, "GOTO [%ld]:", i-1); > + sprintf(ach, "GOTO [" HOST_SIZE_T_PRINT_DEC "]:", > + (fmt_size_t)(i-1)); > SHOW_PARSE_TEXT(ach) > SHOW_PARSE_END > } > @@ -9997,7 +10011,7 @@ inspect_replacing(int backward, > void > parser_inspect(cbl_refer_t identifier_1, > bool backward, > - unsigned long n_operations, > + size_t n_operations, > cbx_inspect_t<cbl_refer_t>* operations) > { > Analyze(); > @@ -10218,7 +10232,8 @@ parser_intrinsic_callv( cbl_field_t *tgt > SHOW_PARSE_HEADER > SHOW_PARSE_TEXT(" of ") > SHOW_PARSE_TEXT(function_name) > - fprintf(stderr, " with %zd parameters", nrefs); > + fprintf(stderr, " with " HOST_SIZE_T_PRINT_DEC " parameters", > + (fmt_size_t)nrefs); > SHOW_PARSE_END > } > > @@ -12700,7 +12715,7 @@ parser_bitop( struct cbl_field_t *tgt, > { > SHOW_PARSE_HEADER > SHOW_PARSE_FIELD( " switch: ", a) > - fprintf(stderr, " mask: %lx", bitmask); > + fprintf(stderr, " mask: " HOST_SIZE_T_PRINT_HEX_PURE, > (fmt_size_t)bitmask); > fprintf(stderr, " op: %s", ops[op]); > SHOW_PARSE_FIELD( " target ", tgt) > SHOW_PARSE_END > @@ -12784,7 +12799,7 @@ parser_bitwise_op(struct cbl_field_t *tg > { > SHOW_PARSE_HEADER > SHOW_PARSE_FIELD( " switch: ", a) > - fprintf(stderr, " mask: %lx", bitmask); > + fprintf(stderr, " mask: " HOST_SIZE_T_PRINT_HEX_PURE, > (fmt_size_t)bitmask); > fprintf(stderr, " op: %s", ops[op]); > SHOW_PARSE_FIELD( " target ", tgt) > SHOW_PARSE_END > @@ -12988,11 +13003,11 @@ parser_program_hierarchy( const struct c > } > char ach[128]; > sprintf(ach, > - "%ld %s%s parent:%ld", > - hier.labels[i].ordinal, > + HOST_SIZE_T_PRINT_DEC " %s%s parent:" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)hier.labels[i].ordinal, > hier.labels[i].label.name, > hier.labels[i].label.common ? " COMMON" : "", > - hier.labels[i].label.parent); > + (fmt_size_t)hier.labels[i].label.parent); > SHOW_PARSE_TEXT(ach); > } > } > @@ -13121,12 +13136,14 @@ parser_program_hierarchy( const struct c > > char ach[2*sizeof(cbl_name_t)]; > tree names_table_type = build_array_type_nelts(CHAR_P, > mol->second.size()+1); > - sprintf(ach, "..our_accessible_functions_%ld", caller); > + sprintf(ach, "..our_accessible_functions_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)caller); > tree the_names_table = gg_define_variable(names_table_type, ach, > vs_file_static); > > // Here is where we build a table out of constructors: > tree constructed_array_type = build_array_type_nelts(pointer_type, > mol->second.size()); > - sprintf(ach, "..our_constructed_table_%ld", caller); > + sprintf(ach, "..our_constructed_table_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)caller); > tree the_constructed_table = > gg_define_variable(constructed_array_type, ach, vs_file_static); > > tree constr_names = make_node(CONSTRUCTOR); > @@ -13144,7 +13161,8 @@ parser_program_hierarchy( const struct c > callee != mol->second.end(); > callee++ ) > { > - sprintf(ach, "%s.%ld", (*callee)->name, > (*callee)->parent_node->our_index); > + sprintf(ach, "%s." HOST_SIZE_T_PRINT_DEC, (*callee)->name, > + (fmt_size_t)(*callee)->parent_node->our_index); > > CONSTRUCTOR_APPEND_ELT( CONSTRUCTOR_ELTS(constr_names), > build_int_cst_type(SIZE_T, i), > @@ -13170,11 +13188,13 @@ parser_program_hierarchy( const struct c > > // And put a pointer to that table into the file-static variable set > aside > // for it: > - sprintf(ach, "..accessible_program_list_%ld", caller); > + sprintf(ach, "..accessible_program_list_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)caller); > tree accessible_list_var_decl = gg_trans_unit_var_decl(ach); > gg_assign( accessible_list_var_decl, > gg_get_address_of(the_names_table) ); > > - sprintf(ach, "..accessible_program_pointers_%ld", caller); > + sprintf(ach, "..accessible_program_pointers_" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)caller); > tree accessible_programs_decl = gg_trans_unit_var_decl(ach); > gg_assign( accessible_programs_decl, > gg_get_address_of(the_constructed_table) ); > } > @@ -13192,7 +13212,8 @@ parser_set_handled(ec_type_t ec_handled) > { > SHOW_PARSE_HEADER > char ach[64]; > - sprintf(ach, "ec_type_t: 0x%lx", size_t(ec_handled)); > + sprintf(ach, "ec_type_t: 0x" HOST_SIZE_T_PRINT_HEX_PURE, > + (fmt_size_t)ec_handled); > SHOW_PARSE_TEXT(ach); > SHOW_PARSE_END > } > @@ -13261,7 +13282,7 @@ parser_set_numeric(struct cbl_field_t *t > SHOW_PARSE_TEXT(tgt->name) > SHOW_PARSE_TEXT(" to ") > char ach[32]; > - sprintf(ach, "%ld", value); > + sprintf(ach, HOST_SIZE_T_PRINT_DEC, (fmt_size_t)value); > SHOW_PARSE_TEXT(ach); > SHOW_PARSE_END > } > @@ -15983,12 +16004,14 @@ psa_new_var_decl(cbl_field_t *new_var, c > && symbol_at(new_var->parent)->type == SymField ) > { > // We have a parent that is a field > - sprintf(id_string, ".%ld_%ld", our_index, new_var->parent); > + sprintf(id_string, "." HOST_SIZE_T_PRINT_DEC "_" > HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)our_index, (fmt_size_t)new_var->parent); > } > else > { > // The parent is zero, so it'll be implied: > - sprintf(id_string, ".%ld", our_index); > + sprintf(id_string, "." HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)our_index); > } > > if(strcasecmp(new_var->name, "filler") == 0) > @@ -16229,29 +16252,30 @@ parser_symbol_add(struct cbl_field_t *ne > } > while(0); > > - fprintf(stderr, " %2.2d %s<%s> off:%zd " > - "msiz:%d cap:%d dig:%d rdig:%d attr:0x%lx loc:%p", > + fprintf(stderr, " %2.2d %s<%s> off:" HOST_SIZE_T_PRINT_DEC " " > + "msiz:%d cap:%d dig:%d rdig:%d attr:0x" > HOST_SIZE_T_PRINT_HEX_PURE " loc:%p", > new_var->level, > new_var->name, > cbl_field_type_str(new_var->type), > - new_var->offset, > + (fmt_size_t)new_var->offset, > new_var->data.memsize, > new_var->data.capacity, > new_var->data.digits, > new_var->data.rdigits, > - new_var->attr, > + (fmt_size_t)new_var->attr, > (void*)new_var); > > if( is_table(new_var) ) > { > - fprintf(stderr," OCCURS:%zd", new_var->occurs.ntimes()); > + fprintf(stderr," OCCURS:" HOST_SIZE_T_PRINT_DEC, > + (fmt_size_t)new_var->occurs.ntimes()); > } > cbl_field_t *parent = parent_of(new_var); > if( parent ) > { > fprintf(stderr, > - " parent:(%zd)%s", > - new_var->parent, > + " parent:(" HOST_SIZE_T_PRINT_DEC ")%s", > + (fmt_size_t)new_var->parent, > parent->name); > } > else > @@ -16264,8 +16288,8 @@ parser_symbol_add(struct cbl_field_t *ne > if( e->type == SymFile ) > { > fprintf(stderr, > - " parent_file:(%zd)%s", > - new_var->parent, > + " parent_file:(" HOST_SIZE_T_PRINT_DEC ")%s", > + (fmt_size_t)new_var->parent, > e->elem.file.name); > if( e->elem.file.attr & external_e ) > { > @@ -16711,9 +16735,10 @@ parser_symbol_add(struct cbl_field_t *ne > if( !bytes_to_allocate ) > { > fprintf(stderr, > - "bytes_to_allocate is zero for %s (symbol number %ld)\n", > + "bytes_to_allocate is zero for %s (symbol number " > + HOST_SIZE_T_PRINT_DEC ")\n", > new_var->name, > - new_var->our_index); > + (fmt_size_t)new_var->our_index); > gcc_assert(bytes_to_allocate); > } > > @@ -16747,16 +16772,16 @@ parser_symbol_add(struct cbl_field_t *ne > { > // Avoid doubling up on leading underscore > sprintf(achDataName, > - "%s_data_%lu", > + "%s_data_" HOST_SIZE_T_PRINT_UNSIGNED, > new_var->name, > - sv_data_name_counter++); > + (fmt_size_t)sv_data_name_counter++); > } > else > { > sprintf(achDataName, > - "_%s_data_%lu", > + "_%s_data_" HOST_SIZE_T_PRINT_UNSIGNED, > new_var->name, > - sv_data_name_counter++); > + (fmt_size_t)sv_data_name_counter++); > } > > if( new_var->attr & external_e ) > --- gcc/cobol/cdf-copy.cc.jj 2025-04-08 14:08:48.536319661 +0200 > +++ gcc/cobol/cdf-copy.cc 2025-05-02 12:16:43.448926560 +0200 > @@ -34,6 +34,7 @@ > // > // We regret any confusion engendered. > > +#include "config.h" > #include <glob.h> > > #include "cobol-system.h" > --- gcc/cobol/scan_ante.h.jj 2025-04-12 13:10:31.679522486 +0200 > +++ gcc/cobol/scan_ante.h 2025-05-02 12:16:43.448926560 +0200 > @@ -438,11 +438,12 @@ trim_location( int nkeep) { > } rescan = { yytext + nkeep, yytext + yyleng }; > > auto nline = std::count(rescan.p, rescan.pend, '\n'); > - dbgmsg("%s:%d: yyless(%d), rescan '%.*s' (%zu lines, %d bytes)", > + dbgmsg("%s:%d: yyless(%d), rescan '%.*s' (" HOST_SIZE_T_PRINT_UNSIGNED > + " lines, " HOST_SIZE_T_PRINT_UNSIGNED " bytes)", > __func__, __LINE__, > nkeep, > int(rescan.size()), rescan.p, > - nline, rescan.size()); > + (fmt_size_t)nline, (fmt_size_t)rescan.size()); > if( nline ) { > gcc_assert( yylloc.first_line + nline <= yylloc.last_line ); > yylloc.last_line =- int(nline); > --- gcc/cobol/structs.cc.jj 2025-04-08 14:08:48.725317030 +0200 > +++ gcc/cobol/structs.cc 2025-05-02 12:16:43.455926467 +0200 > @@ -176,7 +176,7 @@ create_cblc_field_t() > struct cblc_field_t *parent;// This field's immediate parent field > size_t occurs_lower; // non-zero for a table > size_t occurs_upper; // non-zero for a table > - size_t attr; // See cbl_field_attr_t > + uint64_t attr; // See cbl_field_attr_t > signed char type; // A one-byte copy of cbl_field_type_t > signed char level; // This variable's level in the naming > heirarchy > signed char digits; // Digits specified in PIC string; e.g. > 5 for 99v999 > @@ -196,7 +196,7 @@ create_cblc_field_t() > CHAR_P, "parent", > SIZE_T, "occurs_lower", > SIZE_T, "occurs_upper", > - SIZE_T, "attr", > + ULONGLONG, "attr", > SCHAR, "type", > SCHAR, "level", > SCHAR, "digits", > --- gcc/cobol/cbldiag.h.jj 2025-04-12 13:10:31.565524062 +0200 > +++ gcc/cobol/cbldiag.h 2025-05-02 12:16:43.480926133 +0200 > @@ -97,7 +97,7 @@ void cbl_unimplemented_at( const YYLTYP > * be localized and fwrite directly to standard out. dbgmsg is activated by > * -fflex-debug or -fyacc-debug. > */ > -void dbgmsg( const char fmt[], ... ); > +void dbgmsg( const char fmt[], ... ) ATTRIBUTE_PRINTF_1; > > void gcc_location_set( const YYLTYPE& loc ); > > --- gcc/cobol/gcobolspec.cc.jj 2025-04-08 14:08:48.595318840 +0200 > +++ gcc/cobol/gcobolspec.cc 2025-05-02 12:16:43.492925973 +0200 > @@ -541,13 +541,14 @@ lang_specific_driver (struct cl_decoded_ > #endif > if( verbose && new_options != original_options ) > { > - fprintf(stderr, _("Driving: (%ld)\n"), new_option_count); > + fprintf(stderr, _("Driving: (" HOST_SIZE_T_PRINT_DEC ")\n"), > + (fmt_size_t)new_option_count); > for(size_t i=0; i<new_option_count; i++) > { > fprintf(stderr, > - " [%2ld] %4ld %s\n", > - i, > - new_options[i].opt_index, > + " [%2" GCC_PRISZ "d] %4" GCC_PRISZ "d %s\n", > + (fmt_size_t)i, > + (fmt_size_t)new_options[i].opt_index, > new_options[i].orig_option_with_args_text); > } > fprintf (stderr, "\n"); > --- gcc/cobol/parse_ante.h.jj 2025-04-08 14:08:48.680317657 +0200 > +++ gcc/cobol/parse_ante.h 2025-05-02 12:16:43.533925426 +0200 > @@ -142,7 +142,8 @@ literal_of( size_t value ) { > case 0: return literally_zero; > case 1: return literally_one; > } > - cbl_err("logic error: %s: %zu not supported", __func__, value); > + cbl_err("logic error: %s: " HOST_SIZE_T_PRINT_UNSIGNED " not supported", > + __func__, (fmt_size_t)value); > return NULL; > } > > @@ -312,7 +313,9 @@ struct evaluate_elem_t { > case_iter pcase; > > void dump() const { > - dbgmsg( "nother=%zu label '%s', %zu cases", nother, label.name, > cases.size() ); > + dbgmsg( "nother=" HOST_SIZE_T_PRINT_UNSIGNED " label '%s', " > + HOST_SIZE_T_PRINT_UNSIGNED " cases", > + (fmt_size_t)nother, label.name, (fmt_size_t)cases.size() ); > std::for_each( cases.begin(), cases.end(), case_t::Dump ); > } > > @@ -542,8 +545,10 @@ struct arith_t { > res.refer.field = cbl_field_of(symbol_at(tgt)); > tgts.push_back( res ); > > - dbgmsg("%s:%d: SRC: %3zu %s", __func__, __LINE__, src, a.str()); > - dbgmsg("%s:%d: to %3zu %s", __func__, __LINE__, tgt, res.refer.str()); > + dbgmsg("%s:%d: SRC: %3" GCC_PRISZ "u %s", > + __func__, __LINE__, (fmt_size_t)src, a.str()); > + dbgmsg("%s:%d: to %3" GCC_PRISZ "u %s", > + __func__, __LINE__, (fmt_size_t)tgt, res.refer.str()); > } > void operator()( const corresponding_fields_t::const_reference elem ) { > another_pair( elem.first, elem.second ); > @@ -2089,8 +2094,10 @@ static class current_t { > size_t n = > parser_call_target_update(caller, called->name, mangled_name); > // Zero is not an error > - dbgmsg("updated %zu calls from #%-3zu (%s) s/%s/%s/", > - n, caller, caller_name, called->name, mangled_name); > + dbgmsg("updated " HOST_SIZE_T_PRINT_UNSIGNED > + " calls from #%-3" GCC_PRISZ "u (%s) s/%s/%s/", > + (fmt_size_t)n, (fmt_size_t)caller, caller_name, > + called->name, mangled_name); > } > } > if( yydebug ) parser_call_targets_dump(); > @@ -3006,8 +3013,8 @@ file_add( YYLTYPE loc, cbl_file_t *file > } > file = cbl_file_of(e); > snprintf(field->name, sizeof(field->name), > - "%s%zu_%s", > - record_area_name_stem, symbol_index(e), file->name); > + "%s" HOST_SIZE_T_PRINT_UNSIGNED "_%s", > + record_area_name_stem, (fmt_size_t)symbol_index(e), file->name); > if( file->attr & external_e ) { > snprintf(field->name, sizeof(field->name), > "%s%s", record_area_name_stem, file->name); > @@ -3153,7 +3160,8 @@ static cbl_label_t * > implicit_paragraph() > { > cbl_name_t name; > - sprintf(name, "_implicit_paragraph_%zu", symbol_index()); > + sprintf(name, "_implicit_paragraph_" HOST_SIZE_T_PRINT_UNSIGNED, > + (fmt_size_t)symbol_index()); > // Programs have to start with an implicit paragraph > return label_add(LblParagraph, name, yylineno); > } > @@ -3161,7 +3169,8 @@ static cbl_label_t * > implicit_section() > { > cbl_name_t name; > - sprintf(name, "_implicit_section_%zu", symbol_index()); > + sprintf(name, "_implicit_section_" HOST_SIZE_T_PRINT_UNSIGNED, > + (fmt_size_t)symbol_index()); > // Programs have to start with an implicit section > return label_add(LblSection, name, yylineno); > } > @@ -3236,7 +3245,8 @@ data_division_ready() { > } > > if( nsymbol == 0 || nparse_error > 0 ) { > - dbgmsg( "%d errors in DATA DIVISION, compilation ceases", nparse_error ); > + dbgmsg( HOST_SIZE_T_PRINT_DEC " errors in DATA DIVISION, compilation > ceases", > + (fmt_size_t)nparse_error ); > return false; > } > > --- gcc/cobol/symbols.h.jj 2025-04-08 14:08:48.739316835 +0200 > +++ gcc/cobol/symbols.h 2025-05-02 12:16:43.558925092 +0200 > @@ -494,7 +494,7 @@ bool is_elementary( enum cbl_field_type_ > struct cbl_field_t { > size_t offset; > enum cbl_field_type_t type, usage; > - size_t attr; > + uint64_t attr; > static_assert(sizeof(attr) == sizeof(cbl_field_attr_t), "wrong attr size"); > size_t parent; // symbols[] index of our parent > size_t our_index; // symbols[] index of this field, set in symbol_add() > @@ -597,8 +597,8 @@ struct cbl_field_t { > bool has_attr( cbl_field_attr_t attr ) const { > return cbl_field_attr_t(this->attr & attr) == attr; > } > - size_t set_attr( cbl_field_attr_t attr ); > - size_t clear_attr( cbl_field_attr_t attr ); > + uint64_t set_attr( cbl_field_attr_t attr ); > + uint64_t clear_attr( cbl_field_attr_t attr ); > const char * attr_str( const std::vector<cbl_field_attr_t>& attrs ) const; > > bool is_justifiable() const { > @@ -1273,7 +1273,8 @@ struct function_descr_t { > static function_descr_t init( const char name[] ) { > function_descr_t descr = {}; > if( -1 == snprintf( descr.name, sizeof(descr.name), "%s", name ) ) { > - dbgmsg("name truncated to '%s' (max %zu characters)", name); > + dbgmsg("name truncated to '%s' (max " HOST_SIZE_T_PRINT_UNSIGNED > + " characters)", name, (fmt_size_t)sizeof(descr.name)); > } > return descr; // truncation also reported elsewhere ? > } > @@ -2049,11 +2050,12 @@ struct cbl_perform_tgt_t { > void dump() const { > assert(ifrom); > if( !ito ) { > - dbgmsg( "%s:%d: #%3zu %s", __PRETTY_FUNCTION__, __LINE__, > - ifrom, from()->str() ); > + dbgmsg( "%s:%d: #%3" GCC_PRISZ "u %s", __PRETTY_FUNCTION__, __LINE__, > + (fmt_size_t)ifrom, from()->str() ); > } else { > - dbgmsg( "%s:%d: #%3zu %s THRU #%3zu %s", __PRETTY_FUNCTION__, __LINE__, > - ifrom, from()->str(), ito, to()->str() ); > + dbgmsg( "%s:%d: #%3" GCC_PRISZ "u %s THRU #%3" GCC_PRISZ "u %s", > + __PRETTY_FUNCTION__, __LINE__, > + (fmt_size_t)ifrom, from()->str(), (fmt_size_t)ito, to()->str() > ); > } > } > > @@ -2246,7 +2248,7 @@ cbl_file_t * symbol_record_file( const c > > struct cbl_field_t * symbol_find_odo( const cbl_field_t * field ); > > -size_t numeric_group_attrs( const cbl_field_t *field ); > +uint64_t numeric_group_attrs( const cbl_field_t *field ); > > static inline struct cbl_field_t * > field_at( size_t index ) { > > > Jakub >