aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/c-compiler.m47
-rwxr-xr-xconfigure5
2 files changed, 10 insertions, 2 deletions
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index ed26644a488..67323ade124 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -285,10 +285,15 @@ fi])# PGAC_C_BUILTIN_BSWAP64
# -------------------------
# Check if the C compiler understands __builtin_constant_p(),
# and define HAVE__BUILTIN_CONSTANT_P if so.
+# We need __builtin_constant_p("string literal") to be true, but some older
+# compilers don't think that, so test for that case explicitly.
AC_DEFUN([PGAC_C_BUILTIN_CONSTANT_P],
[AC_CACHE_CHECK(for __builtin_constant_p, pgac_cv__builtin_constant_p,
[AC_COMPILE_IFELSE([AC_LANG_SOURCE(
-[[static int x; static int y[__builtin_constant_p(x) ? x : 1];]]
+[[static int x;
+ static int y[__builtin_constant_p(x) ? x : 1];
+ static int z[__builtin_constant_p("string literal") ? 1 : x];
+]]
)],
[pgac_cv__builtin_constant_p=yes],
[pgac_cv__builtin_constant_p=no])])
diff --git a/configure b/configure
index ca76ef0ab22..58eafd31c58 100755
--- a/configure
+++ b/configure
@@ -11901,7 +11901,10 @@ if ${pgac_cv__builtin_constant_p+:} false; then :
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-static int x; static int y[__builtin_constant_p(x) ? x : 1];
+static int x;
+ static int y[__builtin_constant_p(x) ? x : 1];
+ static int z[__builtin_constant_p("string literal") ? 1 : x];
+
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :