]> git.pond.sub.org Git - empserver/blobdiff - configure.ac
configure: Use -fno-strict-aliasing -fno-strict-overflow
[empserver] / configure.ac
index 64cea21a6f2d914d55434e7dded7d23d62dea268..f5dd1b5855c5bcb644ca20486f62b3e05a7ec0de 100644 (file)
@@ -81,25 +81,65 @@ LIBS_server="$LIBS"
 ### Checks for typedefs, structures, and compiler characteristics
 
 # Enable useful warnings
-# clang needs to be tested with -Werror=unknown-warning-option
+# Some of them are commented out because the code needs cleanup first
+# Clang needs to be tested with -Werror=unknown-warning-option
 AX_CHECK_COMPILE_FLAG([-Werror=unknown-warning-option],
 [cflags_test="-Werror=unknown-warning-option"],
 [cflags_test=""])
 MY_APPEND_COMPILE_FLAGS([-Wall -Wextra dnl
+dnl -Wcast-align dnl
+dnl -Wconversion dnl
+-Wdeclaration-after-statement dnl
+dnl -Wformat-nonliteral dnl
+-Wformat-security dnl
+-Winit-self dnl
+-Wlogical-op dnl
 -Wmissing-prototypes dnl
 -Wnested-externs dnl
+-Wold-style-definition dnl
+-Wpacked dnl
 -Wpointer-arith dnl
 -Wredundant-decls dnl
+dnl -Wshadow dnl
 -Wstrict-prototypes dnl
+dnl too prone to false positives: -Wsuggest-attribute=format dnl
+dnl -Wswitch-default dnl
+-Wundef dnl
 -Wno-unused-parameter dnl
 ], [], [$cflags_test])
 
 # Our carg() conflicts with libm's TODO clean that up
-MY_APPEND_COMPILE_FLAGS([-fno-builtin-carg])
+MY_APPEND_COMPILE_FLAGS([-fno-builtin-carg -Wno-incompatible-library-redeclaration])
 
 # 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