The configure test "for clean definition of __STDC_VERSION_STDDEF_H__" is
supposed to test for GCC bug 
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870.
This bug is fixed in current GCC snapshots. That is, it affects exactly the
GCC versions 13 and 14. But our configure test still reports "no" with
current GCC.

The cause is that this test interferes with an undocumented symbol
__STDC_VERSION_STDDEF_H__.

This patch fixes it.


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

        stddef-h: Make a configure test work with upcoming GCC 15.
        * m4/stddef_h.m4 (gl_STDDEF_H): Replace test "for clean definition" with
        one that succeeds in GCC 15.

diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
index c09396ae55..13aff50e71 100644
--- a/m4/stddef_h.m4
+++ b/m4/stddef_h.m4
@@ -1,5 +1,5 @@
 # stddef_h.m4
-# serial 17
+# serial 18
 dnl Copyright (C) 2009-2025 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -90,24 +90,24 @@ AC_DEFUN_ONCE([gl_STDDEF_H]
     GL_GENERATE_STDDEF_H=true
   fi
 
-  AC_CACHE_CHECK([for clean definition of __STDC_VERSION_STDDEF_H__],
-    [gl_cv_clean_version_stddef],
-    [AC_PREPROC_IFELSE(
-       [AC_LANG_SOURCE(
-          [[/* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870 */
-            #include <stddef.h>
-            #undef __STDC_VERSION_STDDEF_H__
-            #include <time.h>
-            #ifdef __STDC_VERSION_STDDEF_H__
-            # error "<time.h> defines __STDC_VERSION_STDDEF_H__"
-            #endif
-          ]])],
-        [gl_cv_clean_version_stddef=yes],
-        [gl_cv_clean_version_stddef=no])])
-  if test "$gl_cv_clean_version_stddef" = no; then
-    STDDEF_NOT_IDEMPOTENT=1
-    GL_GENERATE_STDDEF_H=true
-  fi
+  dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870
+  dnl affects GCC 13 and 14.
+  AC_CACHE_CHECK([whether <stddef.h> is idempotent],
+    [gl_cv_stddef_idempotent],
+    [AC_COMPILE_IFELSE([
+       #if __GNUC__ == 13 || __GNUC__ == 14
+        #error "bug 114870 is present"
+       #endif
+       ],
+       [gl_cv_stddef_idempotent="guessing yes"],
+       [gl_cv_stddef_idempotent="guessing no"])
+    ])
+  case "$gl_cv_stddef_idempotent" in
+    *yes) ;;
+    *) STDDEF_NOT_IDEMPOTENT=1
+       GL_GENERATE_STDDEF_H=true
+       ;;
+  esac
 
   if $GL_GENERATE_STDDEF_H; then
     gl_NEXT_HEADERS([stddef.h])




Reply via email to