mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Disable -faggressive-loop-optimizations in gcc 4.8+ for pre-9.2 branches.
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
8137f2c323
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 commit is contained in:
@ -438,6 +438,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.
|
||||
|
Reference in New Issue
Block a user