Ping. On 2026-06-12 2:20 p.m., John David Anglin wrote: > Tested on hppa64-hp-hpux11.11 and x86_64-pc-linux-gnu. > > Okay? > > Dave > --- > > libgfortran: Define macro to handle z length modifier in format strings > > hppa64-hp-hpux* lacks the z length modifier. It specifies the following > integer conversion corresponds to a size_t or a ssize_t argument. The > size_t type is unsigned long on HP-UX, so we can replace the z length > modifier with l on HP-UX. > > 2026-06-11 John David Anglin <[email protected]> > > libgfortran/ChangeLog: > > * libgfortran.h (FLM_Z): Define. > * caf/shmem/alloc.c (get_memory_by_id_internal): Use FLM_Z. > (alloc_free_memory_with_id): Likewise. > * caf/shmem/supervisor.c (get_memory_size_from_envvar): Likewise. > * caf/shmem/thread_support.c (get_handle): Likewise. > (thread_support_init_supervisor): Likewise. > * intrinsics/reduce.c (reduce): Likewise. > > diff --git a/libgfortran/caf/shmem/alloc.c b/libgfortran/caf/shmem/alloc.c > index 4fc2307ffec..adbab848bd2 100644 > --- a/libgfortran/caf/shmem/alloc.c > +++ b/libgfortran/caf/shmem/alloc.c > @@ -85,7 +85,7 @@ get_memory_by_id_internal (alloc *iface, size_t size, memid > id, bool *created) > { > allocator_unlock (&iface->alloc); > caf_runtime_error ( > - "Size mismatch for coarray allocation id %zd: found = %lu " > + "Size mismatch for coarray allocation id %" FLM_Z "d: found = %lu " > "< size = %lu\n", > id, found_size, size); > return NULL; // The runtime_error exit()s, so this is never reached. > @@ -144,7 +144,8 @@ alloc_free_memory_with_id (alloc *iface, memid id) > if (!hm_search_result_contains (&res)) > { > allocator_unlock (&iface->alloc); > - caf_runtime_error ("Error in free_memory_with_id: %zd not found.\n", > id); > + caf_runtime_error ("Error in free_memory_with_id: %" FLM_Z > + "d not found.\n", id); > return; > } > > diff --git a/libgfortran/caf/shmem/supervisor.c > b/libgfortran/caf/shmem/supervisor.c > index aa692a6551d..8f676c5aa0a 100644 > --- a/libgfortran/caf/shmem/supervisor.c > +++ b/libgfortran/caf/shmem/supervisor.c > @@ -106,7 +106,7 @@ get_memory_size_from_envvar (void) > { > char suffix[2]; > int rv; > - rv = sscanf (e, "%zu%1s", &sz, suffix); > + rv = sscanf (e, "%" FLM_Z "u%1s", &sz, suffix); > if (rv == 2) > { > switch (suffix[0]) > diff --git a/libgfortran/caf/shmem/thread_support.c > b/libgfortran/caf/shmem/thread_support.c > index 0c5f8cc2763..dc907c95b0a 100755 > --- a/libgfortran/caf/shmem/thread_support.c > +++ b/libgfortran/caf/shmem/thread_support.c > @@ -122,7 +122,8 @@ get_handle (const size_t id, const char t) > > if (!pid) > pid = shared_memory_get_env (); > - snprintf (name, MAX_PATH, "Global_gfortran-%s-%c-%zd", pid, t, id); > + snprintf (name, MAX_PATH, "Global_gfortran-%s-%c-%" FLM_Z "d", > + pid, t, id); > switch (t) > { > case 'm': > @@ -131,8 +132,8 @@ get_handle (const size_t id, const char t) > case 'c': > { > handles[id] = CreateSemaphore (NULL, 0, __INT_MAX__, name); > - snprintf (name, MAX_PATH, "Global_gfortran-%s-%c-%zd_lock", pid, t, > - id); > + snprintf (name, MAX_PATH, "Global_gfortran-%s-%c-%" FLM_Z "d_lock", > + pid, t, id); > handles[id + 1] = CreateSemaphore (NULL, 1, 1, name); > this_image.supervisor->global_used_handles > = smax (this_image.supervisor->global_used_handles, id + 2); > @@ -173,7 +174,7 @@ void > thread_support_init_supervisor (void) > { > if (local->total_num_images > ULONGBITS * MAX_NUM_SIGNALED) > - caf_runtime_error ("Maximum number of supported images is %zd.", > + caf_runtime_error ("Maximum number of supported images is %" FLM_Z "d.", > ULONGBITS * MAX_NUM_SIGNALED); > this_image.supervisor->global_used_handles = 0; > } > diff --git a/libgfortran/intrinsics/reduce.c b/libgfortran/intrinsics/reduce.c > index f1f3b838adb..28bc834bc73 100644 > --- a/libgfortran/intrinsics/reduce.c > +++ b/libgfortran/intrinsics/reduce.c > @@ -110,7 +110,7 @@ reduce (parray *ret, > { > int mext = (int)GFC_DESCRIPTOR_EXTENT (mask, i); > runtime_error ("shape mismatch between ARRAY and MASK in the REDUCE " > - "intrinsic (%zd/%d)", ext, mext); > + "intrinsic (%" FLM_Z "d/%d)", ext, mext); > } > > if (scalar_result) > diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h > index 10c5313e1bc..8381cbd7cd4 100644 > --- a/libgfortran/libgfortran.h > +++ b/libgfortran/libgfortran.h > @@ -36,6 +36,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > # define gfc_printf __printf__ > #endif > > +/* Handle unsupported C99 length modifiers. */ > +#if defined(__hpux__) > +/* size_t is unsigned long on HP-UX. */ > +#define FLM_Z "l" > +#else > +#define FLM_Z "z" > +#endif > + > /* config.h MUST be first because it can affect system headers. */ > #include "config.h" >
-- John David Anglin [email protected]
