Add autoconf test for computed goto support.
authorAndres Freund <andres@anarazel.de>
Tue, 14 Mar 2017 03:22:10 +0000 (20:22 -0700)
committerAndres Freund <andres@anarazel.de>
Tue, 14 Mar 2017 06:33:06 +0000 (23:33 -0700)
This will be used in a later commit, to optionally improve expression
evaluation performance.

Author: Andres Freund
Discussion: https://postgr.es/m/20161206034955.bh33paeralxbtluv@alap3.anarazel.de

config/c-compiler.m4
configure
configure.in
src/include/pg_config.h.in
src/include/pg_config.h.win32

index 7d901e1f1aa20e15e24da00d6db5b8ebaa4c88a1..f56d8852f0710d65af088a5b7c849104d4106d8c 100644 (file)
@@ -491,3 +491,27 @@ if test x"$Ac_cachevar" = x"yes"; then
 fi
 undefine([Ac_cachevar])dnl
 ])# PGAC_SSE42_CRC32_INTRINSICS
+
+
+
+# PGAC_C_COMPUTED_GOTO
+# -----------------------
+# Check if the C compiler knows computed gotos (gcc extension, also
+# available in at least clang).  If so define HAVE_COMPUTED_GOTO
+#
+# Checking whether computed gotos are supported syntax-wise ought to
+# be enough, as the syntax is otherwise illegal.
+AC_DEFUN([PGAC_C_COMPUTED_GOTO],
+[AC_CACHE_CHECK(for computed goto support, pgac_cv__computed_goto,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+[[void *labeladdrs[] = {&&my_label};
+  goto *labeladdrs[0];
+  my_label:
+  return 1;
+]])],
+[pgac_cv__computed_goto=yes],
+[pgac_cv__computed_goto=no])])
+if test x"$pgac_cv__computed_goto" = xyes ; then
+AC_DEFINE(HAVE__COMPUTED_GOTO, 1,
+  [Define to 1 if your compiler handles computed gotos.])
+fi])# PGAC_C_COMPUTED_GOTO
index b5cdebb510b24dff22cc168a298cdf0a5db4f257..fafef4638ef5d9049a5585b09e78ef64ea5758d3 100755 (executable)
--- a/configure
+++ b/configure
@@ -11563,6 +11563,40 @@ if test x"$pgac_cv__va_args" = xyes ; then
 
 $as_echo "#define HAVE__VA_ARGS 1" >>confdefs.h
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for computed goto support" >&5
+$as_echo_n "checking for computed goto support... " >&6; }
+if ${pgac_cv__computed_goto+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+void *labeladdrs[] = {&&my_label};
+  goto *labeladdrs[0];
+  my_label:
+  return 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  pgac_cv__computed_goto=yes
+else
+  pgac_cv__computed_goto=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__computed_goto" >&5
+$as_echo "$pgac_cv__computed_goto" >&6; }
+if test x"$pgac_cv__computed_goto" = xyes ; then
+
+$as_echo "#define HAVE__COMPUTED_GOTO 1" >>confdefs.h
+
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
index 1d99cda1d8e502506ee934a922169c0f5817cbc5..9aa9203c40949875c846623cc41dec07fbaa43e7 100644 (file)
@@ -1323,6 +1323,7 @@ PGAC_C_BUILTIN_BSWAP64
 PGAC_C_BUILTIN_CONSTANT_P
 PGAC_C_BUILTIN_UNREACHABLE
 PGAC_C_VA_ARGS
+PGAC_C_COMPUTED_GOTO
 PGAC_STRUCT_TIMEZONE
 PGAC_UNION_SEMUN
 PGAC_STRUCT_SOCKADDR_UN
index 5bcd8a1160fe580d10207ad3e6e93424b0e31fed..94de1a75a22c47797fe8bede69596730efb53046 100644 (file)
 /* Define to 1 if your compiler understands __builtin_unreachable. */
 #undef HAVE__BUILTIN_UNREACHABLE
 
+/* Define to 1 if your compiler handles computed gotos. */
+#undef HAVE__COMPUTED_GOTO
+
 /* Define to 1 if you have __cpuid. */
 #undef HAVE__CPUID
 
index 3e4132cd82406c3fbcfb7a7c52b00aa6795e9df6..c5441855bd8435fc2e889982aca73d0112831a08 100644 (file)
 /* Define to 1 if your compiler understands __builtin_unreachable. */
 /* #undef HAVE__BUILTIN_UNREACHABLE */
 
+/* Define to 1 if your compiler handles computed gotos. */
+#undef HAVE__COMPUTED_GOTO
+
 /* Define to 1 if you have __cpuid. */
 #define HAVE__CPUID 1