############################################################################### 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)