From 3f86dd2ecf962be59e9e79eef83709307c35272f Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 18 Oct 2015 17:48:15 +0200 Subject: [PATCH] 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 --- configure.ac | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/configure.ac b/configure.ac index a80a95af7..f5dd1b585 100644 --- a/configure.ac +++ b/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 -- 2.43.0