aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-03-20 13:35:21 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-03-20 13:35:26 -0400
commitbc18126a6bcb85b51dc082c3ef4417dc016ebd9c (patch)
tree9e6de7632a69ac8ee7980dcb537b49cf1692524b
parent14a72525d2cf88a024ade4c10944c7abb900dda9 (diff)
downloadpostgresql-bc18126a6bcb85b51dc082c3ef4417dc016ebd9c.tar.gz
postgresql-bc18126a6bcb85b51dc082c3ef4417dc016ebd9c.zip
Add configure test to see if the C compiler has gcc-style computed gotos.
We'll need this for the upcoming patch to speed up expression evaluation. Might as well push it now to see if it behaves sanely in the buildfarm. Andres Freund Discussion: https://postgr.es/m/20170320062511.hp5qeurtxrwsvfxr@alap3.anarazel.de
-rw-r--r--config/c-compiler.m424
-rwxr-xr-xconfigure34
-rw-r--r--configure.in1
-rw-r--r--src/include/pg_config.h.in3
-rw-r--r--src/include/pg_config.h.win323
5 files changed, 65 insertions, 0 deletions
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 7d901e1f1aa..3321f226f3e 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -273,6 +273,30 @@ fi])# PGAC_C_BUILTIN_UNREACHABLE
+# 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
+
+
+
# PGAC_C_VA_ARGS
# --------------
# Check if the C compiler understands C99-style variadic macros,
diff --git a/configure b/configure
index b5cdebb510b..9528622421e 100755
--- a/configure
+++ b/configure
@@ -11532,6 +11532,40 @@ if test x"$pgac_cv__builtin_unreachable" = xyes ; then
$as_echo "#define HAVE__BUILTIN_UNREACHABLE 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 for __VA_ARGS__" >&5
$as_echo_n "checking for __VA_ARGS__... " >&6; }
if ${pgac_cv__va_args+:} false; then :
diff --git a/configure.in b/configure.in
index 1d99cda1d8e..7f234f543da 100644
--- a/configure.in
+++ b/configure.in
@@ -1322,6 +1322,7 @@ PGAC_C_BUILTIN_BSWAP32
PGAC_C_BUILTIN_BSWAP64
PGAC_C_BUILTIN_CONSTANT_P
PGAC_C_BUILTIN_UNREACHABLE
+PGAC_C_COMPUTED_GOTO
PGAC_C_VA_ARGS
PGAC_STRUCT_TIMEZONE
PGAC_UNION_SEMUN
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 5bcd8a1160f..6a8176b323e 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -108,6 +108,9 @@
/* Define to 1 if you have the `clock_gettime' function. */
#undef HAVE_CLOCK_GETTIME
+/* Define to 1 if your compiler handles computed gotos. */
+#undef HAVE_COMPUTED_GOTO
+
/* Define to 1 if you have the <crtdefs.h> header file. */
#undef HAVE_CRTDEFS_H
diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32
index 3e4132cd824..5af8369202c 100644
--- a/src/include/pg_config.h.win32
+++ b/src/include/pg_config.h.win32
@@ -78,6 +78,9 @@
/* Define to 1 if you have the `clock_gettime' function. */
/* #undef HAVE_CLOCK_GETTIME */
+/* Define to 1 if your compiler handles computed gotos. */
+/* #undef HAVE_COMPUTED_GOTO */
+
/* Define to 1 if you have the `crypt' function. */
/* #undef HAVE_CRYPT */