Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit649839d

Browse files
committed
Disable -faggressive-loop-optimizations in gcc 4.8+ for pre-9.2 branches.
With this optimization flag enabled, recent versions of gcc can generateincorrect code that assumes variable-length arrays (such as oidvector)are actually fixed-length because they're embedded in some larger struct.The known instance of this problem was fixed in 9.2 and up by commit8137f2c and followon work, which hidesactually-variable-length catalog fields from the compiler altogether.And we plan to gradually convert variable-length fields to official"flexible array member" notation over time, which should prevent this typeof bug from reappearing as gcc gets smarter. We're not going to try toback-port those changes into older branches, though, so apply thisband-aid instead.Andres Freund
1 parenta2e66c0 commit649839d

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

‎configure

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4367,6 +4367,68 @@ if test x"$pgac_cv_prog_cc_cflags__fexcess_precision_standard" = x"yes"; then
43674367
CFLAGS="$CFLAGS -fexcess-precision=standard"
43684368
fi
43694369

4370+
# Disable loop optimizations that get confused by variable-length struct
4371+
# declarations in gcc 4.8+
4372+
{ $as_echo "$as_me:$LINENO: checking whether $CC supports -fno-aggressive-loop-optimizations" >&5
4373+
$as_echo_n "checking whether $CC supports -fno-aggressive-loop-optimizations... " >&6; }
4374+
if test "${pgac_cv_prog_cc_cflags__fno_aggressive_loop_optimizations+set}" = set; then
4375+
$as_echo_n "(cached) " >&6
4376+
else
4377+
pgac_save_CFLAGS=$CFLAGS
4378+
CFLAGS="$pgac_save_CFLAGS -fno-aggressive-loop-optimizations"
4379+
ac_save_c_werror_flag=$ac_c_werror_flag
4380+
ac_c_werror_flag=yes
4381+
cat >conftest.$ac_ext <<_ACEOF
4382+
/* confdefs.h. */
4383+
_ACEOF
4384+
cat confdefs.h >>conftest.$ac_ext
4385+
cat >>conftest.$ac_ext <<_ACEOF
4386+
/* end confdefs.h. */
4387+
4388+
int
4389+
main ()
4390+
{
4391+
4392+
;
4393+
return 0;
4394+
}
4395+
_ACEOF
4396+
rm -f conftest.$ac_objext
4397+
if { (ac_try="$ac_compile"
4398+
case "(($ac_try" in
4399+
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
4400+
*) ac_try_echo=$ac_try;;
4401+
esac
4402+
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
4403+
$as_echo "$ac_try_echo") >&5
4404+
(eval "$ac_compile") 2>conftest.er1
4405+
ac_status=$?
4406+
grep -v '^ *+' conftest.er1 >conftest.err
4407+
rm -f conftest.er1
4408+
cat conftest.err >&5
4409+
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
4410+
(exit $ac_status); } && {
4411+
test -z "$ac_c_werror_flag" ||
4412+
test ! -s conftest.err
4413+
} && test -s conftest.$ac_objext; then
4414+
pgac_cv_prog_cc_cflags__fno_aggressive_loop_optimizations=yes
4415+
else
4416+
$as_echo "$as_me: failed program was:" >&5
4417+
sed 's/^/| /' conftest.$ac_ext >&5
4418+
4419+
pgac_cv_prog_cc_cflags__fno_aggressive_loop_optimizations=no
4420+
fi
4421+
4422+
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
4423+
ac_c_werror_flag=$ac_save_c_werror_flag
4424+
CFLAGS="$pgac_save_CFLAGS"
4425+
fi
4426+
{ $as_echo "$as_me:$LINENO: result: $pgac_cv_prog_cc_cflags__fno_aggressive_loop_optimizations" >&5
4427+
$as_echo "$pgac_cv_prog_cc_cflags__fno_aggressive_loop_optimizations" >&6; }
4428+
if test x"$pgac_cv_prog_cc_cflags__fno_aggressive_loop_optimizations" = x"yes"; then
4429+
CFLAGS="$CFLAGS -fno-aggressive-loop-optimizations"
4430+
fi
4431+
43704432
elif test "$ICC" = yes; then
43714433
# Intel's compiler has a bug/misoptimization in checking for
43724434
# division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.

‎configure.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,9 @@ if test "$GCC" = yes -a "$ICC" = no; then
438438
PGAC_PROG_CC_CFLAGS_OPT([-fwrapv])
439439
# Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+
440440
PGAC_PROG_CC_CFLAGS_OPT([-fexcess-precision=standard])
441+
# Disable loop optimizations that get confused by variable-length struct
442+
# declarations in gcc 4.8+
443+
PGAC_PROG_CC_CFLAGS_OPT([-fno-aggressive-loop-optimizations])
441444
elif test "$ICC" = yes; then
442445
# Intel's compiler has a bug/misoptimization in checking for
443446
# division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp