Commit bc18126a authored by Tom Lane's avatar Tom Lane

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
parent 14a72525
...@@ -273,6 +273,30 @@ fi])# PGAC_C_BUILTIN_UNREACHABLE ...@@ -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 # PGAC_C_VA_ARGS
# -------------- # --------------
# Check if the C compiler understands C99-style variadic macros, # Check if the C compiler understands C99-style variadic macros,
......
...@@ -11531,6 +11531,40 @@ if test x"$pgac_cv__builtin_unreachable" = xyes ; then ...@@ -11531,6 +11531,40 @@ if test x"$pgac_cv__builtin_unreachable" = xyes ; then
$as_echo "#define HAVE__BUILTIN_UNREACHABLE 1" >>confdefs.h $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 fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __VA_ARGS__" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __VA_ARGS__" >&5
$as_echo_n "checking for __VA_ARGS__... " >&6; } $as_echo_n "checking for __VA_ARGS__... " >&6; }
......
...@@ -1322,6 +1322,7 @@ PGAC_C_BUILTIN_BSWAP32 ...@@ -1322,6 +1322,7 @@ PGAC_C_BUILTIN_BSWAP32
PGAC_C_BUILTIN_BSWAP64 PGAC_C_BUILTIN_BSWAP64
PGAC_C_BUILTIN_CONSTANT_P PGAC_C_BUILTIN_CONSTANT_P
PGAC_C_BUILTIN_UNREACHABLE PGAC_C_BUILTIN_UNREACHABLE
PGAC_C_COMPUTED_GOTO
PGAC_C_VA_ARGS PGAC_C_VA_ARGS
PGAC_STRUCT_TIMEZONE PGAC_STRUCT_TIMEZONE
PGAC_UNION_SEMUN PGAC_UNION_SEMUN
......
...@@ -108,6 +108,9 @@ ...@@ -108,6 +108,9 @@
/* Define to 1 if you have the `clock_gettime' function. */ /* Define to 1 if you have the `clock_gettime' function. */
#undef HAVE_CLOCK_GETTIME #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. */ /* Define to 1 if you have the <crtdefs.h> header file. */
#undef HAVE_CRTDEFS_H #undef HAVE_CRTDEFS_H
......
...@@ -78,6 +78,9 @@ ...@@ -78,6 +78,9 @@
/* Define to 1 if you have the `clock_gettime' function. */ /* Define to 1 if you have the `clock_gettime' function. */
/* #undef HAVE_CLOCK_GETTIME */ /* #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. */ /* Define to 1 if you have the `crypt' function. */
/* #undef HAVE_CRYPT */ /* #undef HAVE_CRYPT */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment