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]

Reply via email to