Enable basic overflow in optimization checks (portability related) and missed loop optimizations. The latter (-Wunsafe-loop-optimizations) does not work well with GCC v7.5 so simply skip it there. Signed-off-by: Krzysztof Kozlowski --- accflags.m4 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/accflags.m4 b/accflags.m4 index 57cc48beecc2..0030ac339c86 100644 --- a/accflags.m4 +++ b/accflags.m4 @@ -24,6 +24,7 @@ AC_DEFUN([NEARD_COMPILER_FLAGS], [ AX_CHECK_COMPILE_FLAG([-Wjump-misses-init], [CFLAGS="$CFLAGS -Wjump-misses-init"]) AX_CHECK_COMPILE_FLAG([-Wpointer-arith], [CFLAGS="$CFLAGS -Wpointer-arith"]) AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"]) + AX_CHECK_COMPILE_FLAG([-Wstrict-overflow=2], [CFLAGS="$CFLAGS -Wstrict-overflow=2"]) # GCC v5.0 AX_CHECK_COMPILE_FLAG([-Wformat-signedness], [CFLAGS="$CFLAGS -Wformat-signedness"]) @@ -36,10 +37,16 @@ AC_DEFUN([NEARD_COMPILER_FLAGS], [ AX_CHECK_COMPILE_FLAG([-Walloc-zero], [CFLAGS="$CFLAGS -Walloc-zero"]) # GCC v8.0 AX_CHECK_COMPILE_FLAG([-Wstringop-truncation], [CFLAGS="$CFLAGS -Wstringop-truncation"]) + + # GCC v7.5 from Ubuntu Bionic incorrectly assumes several loops can overflow, so enable + # -Wunsafe-loop-optimizations only on newer GCC. + CC_VERSION=`$CC --version | head -n 1 | sed -e 's/.*\ \(@<:@0-9@:>@\+\.@<:@0-9@:>@\+\.@<:@0-9@:>@\+\)\(-@<:@0-9@:>@\+\)\?$/\1/'` + AX_COMPARE_VERSION([$CC_VERSION],[ge],[8.0.0], + [AX_CHECK_COMPILE_FLAG([-Wunsafe-loop-optimizations], [CFLAGS="$CFLAGS -Wunsafe-loop-optimizations"])], []) fi if (test "$USE_MAINTAINER_MODE" = "pedantic"); then - AX_CHECK_COMPILE_FLAG([-Wstrict-overflow=3], [CFLAGS="$CFLAGS -Wstrict-overflow=3"]) AX_CHECK_COMPILE_FLAG([-Wcast-qual], [CFLAGS="$CFLAGS -Wcast-qual"]) - AX_CHECK_COMPILE_FLAG([-Wunsafe-loop-optimizations], [CFLAGS="$CFLAGS -Wunsafe-loop-optimizations"]) + # Instead of -Wstrict-overflow=2 + AX_CHECK_COMPILE_FLAG([-Wstrict-overflow=3], [CFLAGS="$CFLAGS -Wstrict-overflow=3"]) fi ]) -- 2.27.0