'Call clzl check' breaks cross compilation (was: PATCH 13/22] Coarray caf_shmem final patch set)
Tobias Burnus <[email protected]>
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
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)]) > +]) 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