configure: Use -fno-strict-aliasing -fno-strict-overflow
Contemporary compilers can squeeze out some extra performance by assuming the program never executes code that has undefined behavior according to the C standard. Unfortunately, this can break programs. Pointing out that these programs are non-conforming is as correct as it is unhelpful, at least as long as the compiler is unable to diagnose the non-conformingness. Since keeping our programs working is a lot more important to us than running them as fast as possible, forbid some assumptions that are known to break real-world programs: * Aliasing: perfectly clean programs don't engage in type-punning, and perfectly conforming programs do it only in full accordance with the standard's (subtle!) aliasing rules. Neither kind of perfection is realistic for us, therefore -fno-strict-aliasing. * Signed integer overflow: perfectly clean programs won't ever do signed integer arithmetic that overflows. This is an imperfect program, therefore -fno-strict-overflow. Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
parent
6e80cf103f
commit
3f86dd2ecf
1 changed files with 26 additions and 0 deletions
26
configure.ac
26
configure.ac
|
@ -114,6 +114,32 @@ MY_APPEND_COMPILE_FLAGS([-fno-builtin-carg -Wno-incompatible-library-redeclarati
|
|||
# No multiple definitions of uninitialized global variables
|
||||
MY_APPEND_COMPILE_FLAGS([-fno-common])
|
||||
|
||||
# Reign in overzealous optimizers
|
||||
#
|
||||
# Contemporary compilers can squeeze out some extra performance by
|
||||
# assuming the program never executes code that has undefined behavior
|
||||
# according to the C standard. Unfortunately, this can break
|
||||
# programs. Pointing out that these programs are non-conforming is as
|
||||
# correct as it is unhelpful, at least as long as the compiler is
|
||||
# unable to diagnose the non-conformingness.
|
||||
#
|
||||
# Since keeping our programs working is a lot more important to us
|
||||
# than running them as fast as possible, forbid some assumptions that
|
||||
# are known to break real-world programs:
|
||||
#
|
||||
# * Aliasing: perfectly clean programs don't engage in type-punning,
|
||||
# and perfectly conforming programs do it only in full accordance
|
||||
# with the standard's (subtle!) aliasing rules. Neither kind of
|
||||
# perfection is realistic for us, therefore -fno-strict-aliasing.
|
||||
#
|
||||
# * Signed integer overflow: perfectly clean programs won't ever do
|
||||
# signed integer arithmetic that overflows. This is an imperfect
|
||||
# program, therefore -fno-strict-overflow.
|
||||
#
|
||||
MY_APPEND_COMPILE_FLAGS([dnl
|
||||
-fno-strict-aliasing dnl
|
||||
-fno-strict-overflow])
|
||||
|
||||
|
||||
### Checks for library functions
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue