summaryrefslogtreecommitdiff
path: root/configure.in
diff options
context:
space:
mode:
authorAlvaro Herrera2015-01-20 15:26:20 +0000
committerAlvaro Herrera2015-01-20 15:26:20 +0000
commitd13f41d2153890bf817451c152a83d2867e61199 (patch)
treed41bb8199f0ea0741c4ea65cd23338326d852651 /configure.in
parent1b7f5168c5ebf232366f455a792c9d269308c9ba (diff)
Disable -faggressive-loop-optimizations in gcc 4.8+ for pre-9.2 branches.REL8_3_STABLE
With this optimization flag enabled, recent versions of gcc can generate incorrect 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 commit 8137f2c32322c624e0431fac1621e8e9315202f9 and followon work, which hides actually-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 type of bug from reappearing as gcc gets smarter. We're not going to try to back-port those changes into older branches, though, so apply this band-aid instead. Andres Freund This is a backpatch of commit 649839dd9 to unsupported branches REL8_2_STABLE and REL8_3_STABLE, so that they work with newer toolsets.
Diffstat (limited to 'configure.in')
-rw-r--r--configure.in3
1 files changed, 3 insertions, 0 deletions
diff --git a/configure.in b/configure.in
index 05ce677bfd5..74ad34df406 100644
--- a/configure.in
+++ b/configure.in
@@ -294,6 +294,9 @@ if test "$GCC" = yes -a "$ICC" = no; then
PGAC_PROG_CC_CFLAGS_OPT([-fwrapv])
# Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+
PGAC_PROG_CC_CFLAGS_OPT([-fexcess-precision=standard])
+ # Disable loop optimizations that get confused by variable-length struct
+ # declarations in gcc 4.8+
+ PGAC_PROG_CC_CFLAGS_OPT([-fno-aggressive-loop-optimizations])
elif test "$ICC" = yes; then
# Intel's compiler has a bug/misoptimization in checking for
# division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.