From e2416566660e1892274a56b34504b8b8c6c76101 Mon Sep 17 00:00:00 2001 From: Derek Mauro Date: Thu, 15 Dec 2022 13:34:43 -0800 Subject: Add the ability to turn on warnings that get disabled in tests in GCC and LLVM build configs This was accomplished by adding GccStyleFilterAndCombine() in copts.py Previously, if we had a default warning of the form -Wwarning, adding -Wno-warning to the list of test warnings would just add conflicting flags. We now filter -Wwarning if -Wno-warning is added to the test warnings. PiperOrigin-RevId: 495683815 Change-Id: I5dfd8a30b0be09d6b48237f61d598230ab9027db --- absl/copts/AbseilConfigureCopts.cmake | 8 +- absl/copts/GENERATED_AbseilCopts.cmake | 77 +++++++++++- absl/copts/GENERATED_copts.bzl | 77 +++++++++++- absl/copts/configure_copts.bzl | 2 +- absl/copts/copts.py | 218 ++++++++++++++++++--------------- 5 files changed, 271 insertions(+), 111 deletions(-) diff --git a/absl/copts/AbseilConfigureCopts.cmake b/absl/copts/AbseilConfigureCopts.cmake index f728c0e5..8209b262 100644 --- a/absl/copts/AbseilConfigureCopts.cmake +++ b/absl/copts/AbseilConfigureCopts.cmake @@ -73,19 +73,19 @@ endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(ABSL_DEFAULT_COPTS "${ABSL_GCC_FLAGS}") - set(ABSL_TEST_COPTS "${ABSL_GCC_FLAGS};${ABSL_GCC_TEST_FLAGS}") + set(ABSL_TEST_COPTS "${ABSL_GCC_TEST_FLAGS}") elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # MATCHES so we get both Clang and AppleClang if(MSVC) # clang-cl is half MSVC, half LLVM set(ABSL_DEFAULT_COPTS "${ABSL_CLANG_CL_FLAGS}") - set(ABSL_TEST_COPTS "${ABSL_CLANG_CL_FLAGS};${ABSL_CLANG_CL_TEST_FLAGS}") + set(ABSL_TEST_COPTS "${ABSL_CLANG_CL_TEST_FLAGS}") else() set(ABSL_DEFAULT_COPTS "${ABSL_LLVM_FLAGS}") - set(ABSL_TEST_COPTS "${ABSL_LLVM_FLAGS};${ABSL_LLVM_TEST_FLAGS}") + set(ABSL_TEST_COPTS "${ABSL_LLVM_TEST_FLAGS}") endif() elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(ABSL_DEFAULT_COPTS "${ABSL_MSVC_FLAGS}") - set(ABSL_TEST_COPTS "${ABSL_MSVC_FLAGS};${ABSL_MSVC_TEST_FLAGS}") + set(ABSL_TEST_COPTS "${ABSL_MSVC_TEST_FLAGS}") set(ABSL_DEFAULT_LINKOPTS "${ABSL_MSVC_LINKOPTS}") else() message(WARNING "Unknown compiler: ${CMAKE_CXX_COMPILER}. Building with no default flags") diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake index ba70ef9b..99b72ab7 100644 --- a/absl/copts/GENERATED_AbseilCopts.cmake +++ b/absl/copts/GENERATED_AbseilCopts.cmake @@ -13,6 +13,12 @@ list(APPEND ABSL_CLANG_CL_FLAGS ) list(APPEND ABSL_CLANG_CL_TEST_FLAGS + "/W3" + "/DNOMINMAX" + "/DWIN32_LEAN_AND_MEAN" + "/D_CRT_SECURE_NO_WARNINGS" + "/D_SCL_SECURE_NO_WARNINGS" + "/D_ENABLE_EXTENDED_ALIGNED_STORAGE" "-Wno-deprecated-declarations" "-Wno-implicit-int-conversion" "-Wno-missing-prototypes" @@ -50,6 +56,20 @@ list(APPEND ABSL_GCC_FLAGS ) list(APPEND ABSL_GCC_TEST_FLAGS + "-Wall" + "-Wextra" + "-Wcast-qual" + "-Wconversion-null" + "-Wformat-security" + "-Woverlength-strings" + "-Wpointer-arith" + "-Wundef" + "-Wunused-local-typedefs" + "-Wunused-result" + "-Wvarargs" + "-Wvla" + "-Wwrite-strings" + "-DNOMINMAX" "-Wno-deprecated-declarations" "-Wno-missing-declarations" "-Wno-sign-compare" @@ -95,6 +115,39 @@ list(APPEND ABSL_LLVM_FLAGS ) list(APPEND ABSL_LLVM_TEST_FLAGS + "-Wall" + "-Wextra" + "-Wcast-qual" + "-Wconversion" + "-Wfloat-overflow-conversion" + "-Wfloat-zero-conversion" + "-Wfor-loop-analysis" + "-Wformat-security" + "-Wgnu-redeclared-enum" + "-Winfinite-recursion" + "-Winvalid-constexpr" + "-Wliteral-conversion" + "-Wmissing-declarations" + "-Woverlength-strings" + "-Wpointer-arith" + "-Wself-assign" + "-Wshadow-all" + "-Wstring-conversion" + "-Wtautological-overlap-compare" + "-Wtautological-unsigned-zero-compare" + "-Wundef" + "-Wuninitialized" + "-Wunreachable-code" + "-Wunused-comparison" + "-Wunused-local-typedefs" + "-Wunused-result" + "-Wvla" + "-Wwrite-strings" + "-Wno-float-conversion" + "-Wno-implicit-float-conversion" + "-Wno-implicit-int-float-conversion" + "-Wno-unknown-warning-option" + "-DNOMINMAX" "-Wno-deprecated-declarations" "-Wno-implicit-int-conversion" "-Wno-missing-prototypes" @@ -115,11 +168,6 @@ list(APPEND ABSL_LLVM_TEST_FLAGS list(APPEND ABSL_MSVC_FLAGS "/W3" - "/DNOMINMAX" - "/DWIN32_LEAN_AND_MEAN" - "/D_CRT_SECURE_NO_WARNINGS" - "/D_SCL_SECURE_NO_WARNINGS" - "/D_ENABLE_EXTENDED_ALIGNED_STORAGE" "/bigobj" "/wd4005" "/wd4068" @@ -128,6 +176,11 @@ list(APPEND ABSL_MSVC_FLAGS "/wd4267" "/wd4503" "/wd4800" + "/DNOMINMAX" + "/DWIN32_LEAN_AND_MEAN" + "/D_CRT_SECURE_NO_WARNINGS" + "/D_SCL_SECURE_NO_WARNINGS" + "/D_ENABLE_EXTENDED_ALIGNED_STORAGE" ) list(APPEND ABSL_MSVC_LINKOPTS @@ -135,6 +188,20 @@ list(APPEND ABSL_MSVC_LINKOPTS ) list(APPEND ABSL_MSVC_TEST_FLAGS + "/W3" + "/bigobj" + "/wd4005" + "/wd4068" + "/wd4180" + "/wd4244" + "/wd4267" + "/wd4503" + "/wd4800" + "/DNOMINMAX" + "/DWIN32_LEAN_AND_MEAN" + "/D_CRT_SECURE_NO_WARNINGS" + "/D_SCL_SECURE_NO_WARNINGS" + "/D_ENABLE_EXTENDED_ALIGNED_STORAGE" "/wd4018" "/wd4101" "/wd4503" diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl index 62aab656..bfae4b70 100644 --- a/absl/copts/GENERATED_copts.bzl +++ b/absl/copts/GENERATED_copts.bzl @@ -14,6 +14,12 @@ ABSL_CLANG_CL_FLAGS = [ ] ABSL_CLANG_CL_TEST_FLAGS = [ + "/W3", + "/DNOMINMAX", + "/DWIN32_LEAN_AND_MEAN", + "/D_CRT_SECURE_NO_WARNINGS", + "/D_SCL_SECURE_NO_WARNINGS", + "/D_ENABLE_EXTENDED_ALIGNED_STORAGE", "-Wno-deprecated-declarations", "-Wno-implicit-int-conversion", "-Wno-missing-prototypes", @@ -51,6 +57,20 @@ ABSL_GCC_FLAGS = [ ] ABSL_GCC_TEST_FLAGS = [ + "-Wall", + "-Wextra", + "-Wcast-qual", + "-Wconversion-null", + "-Wformat-security", + "-Woverlength-strings", + "-Wpointer-arith", + "-Wundef", + "-Wunused-local-typedefs", + "-Wunused-result", + "-Wvarargs", + "-Wvla", + "-Wwrite-strings", + "-DNOMINMAX", "-Wno-deprecated-declarations", "-Wno-missing-declarations", "-Wno-sign-compare", @@ -96,6 +116,39 @@ ABSL_LLVM_FLAGS = [ ] ABSL_LLVM_TEST_FLAGS = [ + "-Wall", + "-Wextra", + "-Wcast-qual", + "-Wconversion", + "-Wfloat-overflow-conversion", + "-Wfloat-zero-conversion", + "-Wfor-loop-analysis", + "-Wformat-security", + "-Wgnu-redeclared-enum", + "-Winfinite-recursion", + "-Winvalid-constexpr", + "-Wliteral-conversion", + "-Wmissing-declarations", + "-Woverlength-strings", + "-Wpointer-arith", + "-Wself-assign", + "-Wshadow-all", + "-Wstring-conversion", + "-Wtautological-overlap-compare", + "-Wtautological-unsigned-zero-compare", + "-Wundef", + "-Wuninitialized", + "-Wunreachable-code", + "-Wunused-comparison", + "-Wunused-local-typedefs", + "-Wunused-result", + "-Wvla", + "-Wwrite-strings", + "-Wno-float-conversion", + "-Wno-implicit-float-conversion", + "-Wno-implicit-int-float-conversion", + "-Wno-unknown-warning-option", + "-DNOMINMAX", "-Wno-deprecated-declarations", "-Wno-implicit-int-conversion", "-Wno-missing-prototypes", @@ -116,11 +169,6 @@ ABSL_LLVM_TEST_FLAGS = [ ABSL_MSVC_FLAGS = [ "/W3", - "/DNOMINMAX", - "/DWIN32_LEAN_AND_MEAN", - "/D_CRT_SECURE_NO_WARNINGS", - "/D_SCL_SECURE_NO_WARNINGS", - "/D_ENABLE_EXTENDED_ALIGNED_STORAGE", "/bigobj", "/wd4005", "/wd4068", @@ -129,6 +177,11 @@ ABSL_MSVC_FLAGS = [ "/wd4267", "/wd4503", "/wd4800", + "/DNOMINMAX", + "/DWIN32_LEAN_AND_MEAN", + "/D_CRT_SECURE_NO_WARNINGS", + "/D_SCL_SECURE_NO_WARNINGS", + "/D_ENABLE_EXTENDED_ALIGNED_STORAGE", ] ABSL_MSVC_LINKOPTS = [ @@ -136,6 +189,20 @@ ABSL_MSVC_LINKOPTS = [ ] ABSL_MSVC_TEST_FLAGS = [ + "/W3", + "/bigobj", + "/wd4005", + "/wd4068", + "/wd4180", + "/wd4244", + "/wd4267", + "/wd4503", + "/wd4800", + "/DNOMINMAX", + "/DWIN32_LEAN_AND_MEAN", + "/D_CRT_SECURE_NO_WARNINGS", + "/D_SCL_SECURE_NO_WARNINGS", + "/D_ENABLE_EXTENDED_ALIGNED_STORAGE", "/wd4018", "/wd4101", "/wd4503", diff --git a/absl/copts/configure_copts.bzl b/absl/copts/configure_copts.bzl index c5e57b38..ca5f26da 100644 --- a/absl/copts/configure_copts.bzl +++ b/absl/copts/configure_copts.bzl @@ -29,7 +29,7 @@ ABSL_DEFAULT_COPTS = select({ "//conditions:default": ABSL_GCC_FLAGS, }) -ABSL_TEST_COPTS = ABSL_DEFAULT_COPTS + select({ +ABSL_TEST_COPTS = select({ "//absl:msvc_compiler": ABSL_MSVC_TEST_FLAGS, "//absl:clang-cl_compiler": ABSL_CLANG_CL_TEST_FLAGS, "//absl:clang_compiler": ABSL_LLVM_TEST_FLAGS, diff --git a/absl/copts/copts.py b/absl/copts/copts.py index 732af9ea..b7f68c7d 100644 --- a/absl/copts/copts.py +++ b/absl/copts/copts.py @@ -11,12 +11,76 @@ The generated copts are consumed by configure_copts.bzl and AbseilConfigureCopts.cmake. """ -# /Wall with msvc includes unhelpful warnings such as C4711, C4710, ... -MSVC_BIG_WARNING_FLAGS = [ - "/W3", +ABSL_GCC_FLAGS = [ + "-Wall", + "-Wextra", + "-Wcast-qual", + "-Wconversion-null", + "-Wformat-security", + "-Wmissing-declarations", + "-Woverlength-strings", + "-Wpointer-arith", + "-Wundef", + "-Wunused-local-typedefs", + "-Wunused-result", + "-Wvarargs", + "-Wvla", # variable-length array + "-Wwrite-strings", + # Don't define min and max macros (Build on Windows using gcc) + "-DNOMINMAX", +] + +ABSL_GCC_TEST_ADDITIONAL_FLAGS = [ + "-Wno-deprecated-declarations", + "-Wno-missing-declarations", + "-Wno-sign-compare", + "-Wno-unused-function", + "-Wno-unused-parameter", + "-Wno-unused-private-field", ] -LLVM_TEST_DISABLE_WARNINGS_FLAGS = [ +ABSL_LLVM_FLAGS = [ + "-Wall", + "-Wextra", + "-Wcast-qual", + "-Wconversion", + "-Wfloat-overflow-conversion", + "-Wfloat-zero-conversion", + "-Wfor-loop-analysis", + "-Wformat-security", + "-Wgnu-redeclared-enum", + "-Winfinite-recursion", + "-Winvalid-constexpr", + "-Wliteral-conversion", + "-Wmissing-declarations", + "-Woverlength-strings", + "-Wpointer-arith", + "-Wself-assign", + "-Wshadow-all", + "-Wstring-conversion", + "-Wtautological-overlap-compare", + "-Wtautological-unsigned-zero-compare", + "-Wundef", + "-Wuninitialized", + "-Wunreachable-code", + "-Wunused-comparison", + "-Wunused-local-typedefs", + "-Wunused-result", + "-Wvla", + "-Wwrite-strings", + # Warnings that are enabled by group warning flags like -Wall that we + # explicitly disable. + "-Wno-float-conversion", + "-Wno-implicit-float-conversion", + "-Wno-implicit-int-float-conversion", + # Disable warnings on unknown warning flags (when warning flags are + # unknown on older compiler versions) + "-Wno-unknown-warning-option", + # Don't define min and max macros (Build on Windows using clang) + "-DNOMINMAX", +] + +ABSL_LLVM_TEST_ADDITIONAL_FLAGS = [ "-Wno-deprecated-declarations", "-Wno-implicit-int-conversion", "-Wno-missing-prototypes", @@ -36,6 +100,28 @@ LLVM_TEST_DISABLE_WARNINGS_FLAGS = [ "-Wno-gnu-zero-variadic-macro-arguments", ] +# /Wall with msvc includes unhelpful warnings such as C4711, C4710, ... +MSVC_BIG_WARNING_FLAGS = [ + "/W3", +] + +MSVC_WARNING_FLAGS = [ + # Increase the number of sections available in object files + "/bigobj", + "/wd4005", # macro-redefinition + "/wd4068", # unknown pragma + # qualifier applied to function type has no meaning; ignored + "/wd4180", + # conversion from 'type1' to 'type2', possible loss of data + "/wd4244", + # conversion from 'size_t' to 'type', possible loss of data + "/wd4267", + # The decorated name was longer than the compiler limit + "/wd4503", + # forcing value to bool 'true' or 'false' (performance warning) + "/wd4800", +] + MSVC_DEFINES = [ "/DNOMINMAX", # Don't define min and max macros (windows.h) # Don't bloat namespace with incompatible winsock versions. @@ -47,103 +133,43 @@ MSVC_DEFINES = [ "/D_ENABLE_EXTENDED_ALIGNED_STORAGE", ] + +def GccStyleFilterAndCombine(default_flags, test_flags): + """Merges default_flags and test_flags for GCC and LLVM. + + Args: + default_flags: A list of default compiler flags + test_flags: A list of flags that are only used in tests + + Returns: + A combined list of default_flags and test_flags, but with all flags of the + form '-Wwarning' removed if test_flags contains a flag of the form + '-Wno-warning' + """ + remove = set(["-W" + f[5:] for f in test_flags if f[:5] == "-Wno-"]) + return [f for f in default_flags if f not in remove] + test_flags + COPT_VARS = { - "ABSL_GCC_FLAGS": [ - "-Wall", - "-Wextra", - "-Wcast-qual", - "-Wconversion-null", - "-Wformat-security", - "-Wmissing-declarations", - "-Woverlength-strings", - "-Wpointer-arith", - "-Wundef", - "-Wunused-local-typedefs", - "-Wunused-result", - "-Wvarargs", - "-Wvla", # variable-length array - "-Wwrite-strings", - # Don't define min and max macros (Build on Windows using gcc) - "-DNOMINMAX", - ], - "ABSL_GCC_TEST_FLAGS": [ - "-Wno-deprecated-declarations", - "-Wno-missing-declarations", - "-Wno-sign-compare", - "-Wno-unused-function", - "-Wno-unused-parameter", - "-Wno-unused-private-field", - ], - "ABSL_LLVM_FLAGS": [ - "-Wall", - "-Wextra", - "-Wcast-qual", - "-Wconversion", - "-Wfloat-overflow-conversion", - "-Wfloat-zero-conversion", - "-Wfor-loop-analysis", - "-Wformat-security", - "-Wgnu-redeclared-enum", - "-Winfinite-recursion", - "-Winvalid-constexpr", - "-Wliteral-conversion", - "-Wmissing-declarations", - "-Woverlength-strings", - "-Wpointer-arith", - "-Wself-assign", - "-Wshadow-all", - "-Wstring-conversion", - "-Wtautological-overlap-compare", - "-Wtautological-unsigned-zero-compare", - "-Wundef", - "-Wuninitialized", - "-Wunreachable-code", - "-Wunused-comparison", - "-Wunused-local-typedefs", - "-Wunused-result", - "-Wvla", - "-Wwrite-strings", - # Warnings that are enabled by group warning flags like -Wall that we - # explicitly disable. - "-Wno-float-conversion", - "-Wno-implicit-float-conversion", - "-Wno-implicit-int-float-conversion", - # Disable warnings on unknown warning flags (when warning flags are - # unknown on older compiler versions) - "-Wno-unknown-warning-option", - # Don't define min and max macros (Build on Windows using clang) - "-DNOMINMAX", - ], - "ABSL_LLVM_TEST_FLAGS": - LLVM_TEST_DISABLE_WARNINGS_FLAGS, + "ABSL_GCC_FLAGS": ABSL_GCC_FLAGS, + "ABSL_GCC_TEST_FLAGS": GccStyleFilterAndCombine( + ABSL_GCC_FLAGS, ABSL_GCC_TEST_ADDITIONAL_FLAGS), + "ABSL_LLVM_FLAGS": ABSL_LLVM_FLAGS, + "ABSL_LLVM_TEST_FLAGS": GccStyleFilterAndCombine( + ABSL_LLVM_FLAGS, ABSL_LLVM_TEST_ADDITIONAL_FLAGS), "ABSL_CLANG_CL_FLAGS": - (MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES), + MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES, "ABSL_CLANG_CL_TEST_FLAGS": - LLVM_TEST_DISABLE_WARNINGS_FLAGS, + MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + ABSL_LLVM_TEST_ADDITIONAL_FLAGS, "ABSL_MSVC_FLAGS": - MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + [ - # Increase the number of sections available in object files - "/bigobj", - "/wd4005", # macro-redefinition - "/wd4068", # unknown pragma - # qualifier applied to function type has no meaning; ignored - "/wd4180", - # conversion from 'type1' to 'type2', possible loss of data - "/wd4244", - # conversion from 'size_t' to 'type', possible loss of data - "/wd4267", - # The decorated name was longer than the compiler limit - "/wd4503", - # forcing value to bool 'true' or 'false' (performance warning) - "/wd4800", + MSVC_BIG_WARNING_FLAGS + MSVC_WARNING_FLAGS + MSVC_DEFINES, + "ABSL_MSVC_TEST_FLAGS": + MSVC_BIG_WARNING_FLAGS + MSVC_WARNING_FLAGS + MSVC_DEFINES + [ + "/wd4018", # signed/unsigned mismatch + "/wd4101", # unreferenced local variable + "/wd4503", # decorated name length exceeded, name was truncated + "/wd4996", # use of deprecated symbol + "/DNOMINMAX", # disable the min() and max() macros from ], - "ABSL_MSVC_TEST_FLAGS": [ - "/wd4018", # signed/unsigned mismatch - "/wd4101", # unreferenced local variable - "/wd4503", # decorated name length exceeded, name was truncated - "/wd4996", # use of deprecated symbol - "/DNOMINMAX", # disable the min() and max() macros from - ], "ABSL_MSVC_LINKOPTS": [ # Object file doesn't export any previously undefined symbols "-ignore:4221", -- cgit v1.2.3