164 lines
5.7 KiB
CMake
164 lines
5.7 KiB
CMake
###############################################################################
|
|
if (__nc_warnings)
|
|
return ()
|
|
endif ()
|
|
|
|
set (__nc_warnings TRUE)
|
|
|
|
|
|
###############################################################################
|
|
include ("${CMAKE_CURRENT_LIST_DIR}/compile_flag.cmake")
|
|
|
|
|
|
###############################################################################
|
|
append_compile_flag(-Wall)
|
|
append_compile_flag(-Wextra)
|
|
|
|
append_compile_flag(-Wno-pragmas)
|
|
|
|
|
|
# -------------------------------------------------------------------------
|
|
# General warnings
|
|
append_compile_flag(-Wbool-compare)
|
|
append_compile_flag(-Wcast-align)
|
|
append_compile_flag(-Wcast-qual)
|
|
append_compile_flag(-Wdisabled-optimization)
|
|
append_compile_flag(-Wfloat-conversion)
|
|
append_compile_flag(-Wfloat-equal)
|
|
append_compile_flag(-Wno-aggressive-loop-optimizations)
|
|
#append_compile_flag(-Wnoexcept) # Wow this can be annoying when combined with Werror
|
|
append_compile_flag(-Wnon-virtual-dtor)
|
|
append_compile_flag(-Wparentheses) # Wparenthesis detects assignment in conditionals...
|
|
append_compile_flag(-Wpointer-arith)
|
|
|
|
# redundant-decls would be useful, but it specifically clashes with GCC
|
|
# intrinsics under msys2 where the builtin and headers define them with
|
|
# different linkages.
|
|
#append_compile_flag(-Wredundant-decls)
|
|
|
|
append_compile_flag(-Wshadow)
|
|
append_compile_flag(-Wsign-compare)
|
|
append_compile_flag(-Wsign-promo)
|
|
append_compile_flag(-Wstrict-aliasing)
|
|
#append_compile_flag(-Wstrict-overflow)
|
|
append_compile_flag(-Wtype-limits)
|
|
append_compile_flag(-Wunused-but-set-variable)
|
|
append_compile_flag(-Wunused-parameter)
|
|
append_compile_flag(-Wpessimizing-move)
|
|
# Don't use -Wswitch-enum, it's the same as -Wswitch but also warns if you use
|
|
# a default. Just don't use a default if that's something you want to catch.
|
|
append_compile_flag(-Wswitch)
|
|
|
|
# dont use unsafe-loop-optimisations as there are too many false positives
|
|
# with language primitives like range-for.
|
|
# append_compile_flag(-Wunsafe-loop-optimizations)
|
|
|
|
# gcc warnings with unknown version
|
|
append_compile_flag(-Wsized-deallocation)
|
|
|
|
# gcc-6.1.0 warnings
|
|
append_compile_flag(-Wshift-negative-value)
|
|
append_compile_flag(-Wnull-dereference)
|
|
append_compile_flag(-Wduplicated-cond)
|
|
|
|
# useless-cast isn't usable on gcc-6.0 or gcc-6.1 due to spurious warnings
|
|
# see gcc#70844
|
|
append_compile_flag(-Wuseless-cast)
|
|
|
|
# gcc 7 warnings
|
|
append_compile_flag(-Wduplicated-branches)
|
|
append_compile_flag(-Wrestrict)
|
|
append_compile_flag(-Wregister)
|
|
append_compile_flag(-Wdangling-else)
|
|
append_compile_flag(-Walloc-zero)
|
|
append_compile_flag(-Walloca)
|
|
append_compile_flag(-Wnonnull)
|
|
append_compile_flag(-Waligned-new)
|
|
|
|
append_compile_flag(-Wno-implicit-fallthrough)
|
|
|
|
# clang 3.7.1 warnings
|
|
append_compile_flag(-Wshorten-64-to-32)
|
|
append_compile_flag(-Wdeprecated)
|
|
append_compile_flag(-Wcovered-switch-default)
|
|
append_compile_flag(-Wcovered-switch-default)
|
|
|
|
append_compile_flag(-Wno-gnu-string-literal-operator-template)
|
|
|
|
# gcc 8.1
|
|
|
|
append_compile_flag(-Wmultistatement-macros)
|
|
append_compile_flag(-Wcast-align=strict)
|
|
append_compile_flag(-Wold-style-cast)
|
|
|
|
append_compile_flag(-Wmissing-field-initializers)
|
|
|
|
# clang 12
|
|
append_compile_flag(-Wcast-function-type)
|
|
append_compile_flag(-Wstring-concatenation)
|
|
append_compile_flag(-Wtautological-unsigned-char-zero-compare)
|
|
append_compile_flag(-Wtautological-value-range-compare)
|
|
|
|
# clang 14
|
|
append_compile_flag(-Wbitwise-instead-of-logical)
|
|
append_compile_flag(-Wunaligned-access)
|
|
append_compile_flag(-Wunreachable-code-fallthrough)
|
|
|
|
# gcc 13
|
|
append_compile_flag(-Wdangling-reference)
|
|
|
|
# gcc 14
|
|
append_compile_flag(-Welaborated-enum-base)
|
|
#append_compile_flag(-Wnrvo)
|
|
append_compile_flag(-Walloc-size)
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Required extensions
|
|
#AX_APPEND_COMPILE_FLAGS([-Wgnu-flexible-array-union-member], [], [-Werror])
|
|
#AX_APPEND_COMPILE_FLAGS([-Wno-c99-extensions], [], [-Werror])
|
|
#AX_APPEND_COMPILE_FLAGS([-Wno-vla-extension], [], [-Werror])
|
|
append_compile_flag(-Wno-vla)
|
|
append_compile_flag(-Wno-multichar)
|
|
append_compile_flag(-Wno-c99-designator)
|
|
|
|
#AS_IF([test "x$ax_cv_cxx_compiler_vendor" != "xgnu"], [
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-c99-extensions], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-flexible-array-extensions], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-conditional-omitted-operand], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-empty-struct], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-flexible-array-union-member], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-zero-variadic-macro-arguments], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-vla-extension], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-zero-length-array], [], [-Werror])
|
|
#])
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Excessive warnings
|
|
append_compile_flag(-Wno-missing-braces)
|
|
|
|
#AS_IF([test "x$ax_cv_cxx_compiler_vendor" != "xgnu"], [
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-nested-anon-types], [], [-Werror])
|
|
# AX_APPEND_COMPILE_FLAGS([-Wno-unused-const-variable], [], [-Werror])
|
|
#])
|
|
|
|
# -------------------------------------------------------------------------
|
|
option (ADVISORY "enable advisory warnings")
|
|
|
|
# Always use suggest-override. It has a low false positive rate and mitigates
|
|
# a possibly significant error.
|
|
append_compile_flag(-Wsuggest-override)
|
|
#append_compile_flag(-Woverloaded-virtual)
|
|
|
|
if (ADVISORY)
|
|
append_compile_flag(-Winline)
|
|
append_compile_flag(-Wsuggest-final-types)
|
|
append_compile_flag(-Wsuggest-final-methods)
|
|
append_compile_flag(-Wweak-vtables)
|
|
append_compile_flag(-Wpadded)
|
|
endif()
|
|
|
|
|
|
# WIP: disable alignment checks for the time being because we use a lot of packed structures that trigger this
|
|
append_compile_flag(-Wno-packed-not-aligned)
|
|
append_compile_flag(-Wno-unaligned-access)
|