With clang 21, released last week, there is a compilation error in the
stdcountof-h tests:

/home/bruno/inst-clang/21.1.0/bin/clang 
-Wl,-rpath,/home/bruno/inst-clang/21.1.0/lib -std=gnu23 -DHAVE_CONFIG_H 
-DEXEEXT=\"\" -DEXEEXT=\"\" -I. -I../../gltests -I..  
-DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I.. 
-I../../gltests/.. -I../gllib -I../../gltests/../gllib 
-I/media/develdata/devel/inst-x86_64-64/include -Wall -Wthread-safety 
-Wno-error -Wno-error -g -O2 -MT test-stdcountof-h.o -MD -MP -MF $depbase.Tpo 
-c -o test-stdcountof-h.o ../../gltests/test-stdcountof-h.c &&\
mv -f $depbase.Tpo $depbase.Po
../../gltests/test-stdcountof-h.c:45:10: error: use of undeclared identifier 
'_gl_verify_is_array'
   45 |   (void) _gl_verify_is_array (unbounded);
      |          ^~~~~~~~~~~~~~~~~~~
../../gltests/test-stdcountof-h.c:46:10: error: use of undeclared identifier 
'_gl_verify_is_array'
   46 |   (void) _gl_verify_is_array (bounded);
      |          ^~~~~~~~~~~~~~~~~~~
../../gltests/test-stdcountof-h.c:47:10: error: use of undeclared identifier 
'_gl_verify_is_array'
   47 |   (void) _gl_verify_is_array (multidimensional);
      |          ^~~~~~~~~~~~~~~~~~~
3 errors generated.
make[3]: *** [Makefile:27092: test-stdcountof-h.o] Error 1

The cause is that when the compiler already has <stdcountof.h>, our override
.h file does not get created, and thus _gl_verify_is_array is not defined.


2025-09-08  Bruno Haible  <br...@clisp.org>

        stdcountof-h tests: Fix compilation error with clang 21.
        * tests/test-stdcountof-h.c (test_func): Don't use _gl_verify_is_array
        if it's not defined.

diff --git a/tests/test-stdcountof-h.c b/tests/test-stdcountof-h.c
index 5d0a9a6611..b64bd9d58b 100644
--- a/tests/test-stdcountof-h.c
+++ b/tests/test-stdcountof-h.c
@@ -42,17 +42,21 @@ test_func (int parameter[3])
 
   (void) local_bounded;
 
+#ifdef _gl_verify_is_array
   (void) _gl_verify_is_array (unbounded);
   (void) _gl_verify_is_array (bounded);
   (void) _gl_verify_is_array (multidimensional);
+#endif
 
   ASSERT (countof (bounded) == 10);
   ASSERT (countof (multidimensional) == 10);
   ASSERT (countof (local_bounded) == 20);
 
 #if 0 /* These produce compilation errors.  */
+# ifdef _gl_verify_is_array
   (void) _gl_verify_is_array (integer);
   (void) _gl_verify_is_array (parameter);
+# endif
 
   ASSERT (countof (integer) >= 0);
   ASSERT (countof (unbounded) >= 0);




Reply via email to