Force "restrict" not to be used when compiling with xlc.

Per buildfarm animal Hornet and followup manual testing by Noah Misch,
it appears xlc miscompiles code using "restrict" in at least some
cases. Allow disabling restrict usage with FORCE_DISABLE_RESTRICT=yes
in template files, and do so for aix/xlc.

Author: Andres Freund and Tom Lane
Discussion: https://postgr.es/m/1820.1507918762@sss.pgh.pa.us
This commit is contained in:
Andres Freund 2017-10-13 11:54:59 -07:00
parent 6393613b6a
commit d133982d59
3 changed files with 14 additions and 2 deletions

6
configure vendored
View File

@ -12466,6 +12466,10 @@ fi
# spelling it understands, because it conflicts with
# __declspec(restrict). Therefore we define pg_restrict to the
# appropriate definition, which presumably won't conflict.
#
# Allow platforms with buggy compilers to force restrict to not be
# used by setting $FORCE_DISABLE_RESTRICT=yes in the relevant
# template.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
if ${ac_cv_c_restrict+:} false; then :
@ -12512,7 +12516,7 @@ _ACEOF
;;
esac
if test "$ac_cv_c_restrict" = "no" ; then
if test "$ac_cv_c_restrict" = "no" -o "x$FORCE_DISABLE_RESTRICT" = "xyes"; then
pg_restrict=""
else
pg_restrict="$ac_cv_c_restrict"

View File

@ -1329,8 +1329,12 @@ PGAC_TYPE_LOCALE_T
# spelling it understands, because it conflicts with
# __declspec(restrict). Therefore we define pg_restrict to the
# appropriate definition, which presumably won't conflict.
#
# Allow platforms with buggy compilers to force restrict to not be
# used by setting $FORCE_DISABLE_RESTRICT=yes in the relevant
# template.
AC_C_RESTRICT
if test "$ac_cv_c_restrict" = "no" ; then
if test "$ac_cv_c_restrict" = "no" -o "x$FORCE_DISABLE_RESTRICT" = "xyes"; then
pg_restrict=""
else
pg_restrict="$ac_cv_c_restrict"

View File

@ -10,6 +10,10 @@ if test "$GCC" != yes ; then
CFLAGS="-O2 -qmaxmem=16384 -qsrcmsg"
;;
esac
# Due to a compiler bug, see 20171013023536.GA492146@rfd.leadboat.com for details,
# force restrict not to be used when compiling with xlc.
FORCE_DISABLE_RESTRICT=yes
fi
# Native memset() is faster, tested on: