On Fri, Feb 27, 2026 at 1:12 PM Richard Biener
<[email protected]> wrote:
>
> On Fri, Feb 27, 2026 at 1:01 PM Richard Biener
> <[email protected]> wrote:
> >
> > On Fri, Feb 27, 2026 at 12:56 PM Tobias Burnus <[email protected]> wrote:
> > >
> > > Hi Jerry & Andre,
> > >
> > > the commit r16-7734-g136940891b16ba breaks cross compilation:
> > >
> > > Jerry D wrote:
> > > > From: Andre Vehreschild<[email protected]>
> > > > Date: Thu, 12 Feb 2026 11:17:47 -0800
> > > > Subject: [PATCH] Fortran: Add a shared memory coarray implementation
> > > > [PR88076]
> > > >
> > > > Add caf_shmem, a shared memory multi process coarray implementation.
> > > > The library adheres to the existing coarray ABI and is controlled by
> > > > environment variables for selecting the number of images and virtual
> > > > memory size.
> > > ...
> > > > libgfortran/ChangeLog:
> > > >
> > > > * Makefile.am: Add new library.
> > > > * Makefile.in: Regenerated
> > > > * acinclude.m4: Add check for reasonable clzl.
> > > > * config.h.in: Regenerate.
> > > > * configure: Regenerate.
> > > > * configure.ac: Call clzl check.
> > > * * *
> > > > --- a/libgfortran/acinclude.m4
> > > > +++ b/libgfortran/acinclude.m4
> > > ...
> > > > +AC_DEFUN([LIBGFOR_CHECK_SANE_BUILTIN_CLZL], [
> > > > + AC_RUN_IFELSE([AC_LANG_PROGRAM([[
> > > > + int main()
> > > > + {
> > > > + return __builtin_clzl(256) != 8;
> > > > + }]], [[]])],
> > > > + AC_DEFINE(HAVE_SANE_BUILTIN_CLZL, 1,
> > > > + [Define if __builtin_clzl behaves as expected.])
> > > > + AM_CONDITIONAL([HAVE_SANE_BUILTIN_CLZL],true),
> > > > + [AM_CONDITIONAL([HAVE_SANE_BUILTIN_CLZL],false)])
> > > > +])
> >
> > What does this test anyway? clzl (256) should not return 8 but 55.
> > Did you want to check c_T_zl here? I suggest to simply drop this given
> > it's broken?
>
> I'm also not convinced by
>
> static size_t
> next_power_of_two (size_t size)
> {
> #ifdef HAVE_SANE_BUILTIN_CLZL
> assert (size);
> #if (__INTPTR_WIDTH__ == 64)
> return 1 << (VOIDP_BITS - __builtin_clzl (size - 1));
> #else
>
> which uses VOIDP_BITS, not 'unsigned long' bits, and it seems to
> correlate size_t width with unsigned long width by using INTPTR_WIDTH.
> What do you do for long == 32bits targets (windows) which have 64bit
> pointers? You want to use __builtin_clzll there I think.
>
> Of course the FP fallback
>
> #else
> return 1 << (int)ceil(log2(size));
> #endif
>
> is also a bit questionable. See gcc/hwint.{h,cc} for ceil_log2 on
> uint64_t.
That said, libgfortran is always built by the just built GCC, so
__builtin_clzll should always be available and correct. Just use it.
Richard.
>
> Richard.
>
> >
> > Richard.
> >
> > > This fails with:
> > >
> > > configure: error: in
> > > build-gcc-trunk-offload-amdgcn/amdgcn-amdhsa/libgfortran'
> > > configure: error: cannot run test program while cross compiling
> > >
> > > Namely, the generated configure file contains:
> > > > # Check if __builtin_clzl behaves (it doesn't on Msys2/ucrt64).
> > > >
> > > > if test "$cross_compiling" = yes; then :
> > > > { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
> > > > $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
> > > > as_fn_error $? "cannot run test program while cross compiling
> > > > See \`config.log' for more details" "$LINENO" 5; }
> > > > else
> > >
> > > In the code, you can either use code like:
> > > if test "$cross_compiling" != no; then
> > > for the current code and the following in an else branch.
> > > Or just the following:
> > >
> > > case "${host}" in
> > > *-*-mingw32*)
> > > ....
> > > ;;
> > > *)
> > > ....
> > > ;;
> > > esac
> > >
> > > In any case, AC_RUN_IFELSE is wrong for cross compilation,
> > > AC_COMPILE_IFELSE is fine.
> > >
> > > Tobias
> > >