Commit e2416566 by Derek Mauro Committed by Copybara-Service

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
parent 3fe1e96e
......@@ -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")
......
......@@ -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"
......
......@@ -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",
......
......@@ -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,
......
......@@ -11,44 +11,7 @@ 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",
]
LLVM_TEST_DISABLE_WARNINGS_FLAGS = [
"-Wno-deprecated-declarations",
"-Wno-implicit-int-conversion",
"-Wno-missing-prototypes",
"-Wno-missing-variable-declarations",
"-Wno-shadow",
"-Wno-shorten-64-to-32",
"-Wno-sign-compare",
"-Wno-sign-conversion",
"-Wno-unreachable-code-loop-increment",
"-Wno-unused-function",
"-Wno-unused-member-function",
"-Wno-unused-parameter",
"-Wno-unused-private-field",
"-Wno-unused-template",
"-Wno-used-but-marked-unused",
# gtest depends on this GNU extension being offered.
"-Wno-gnu-zero-variadic-macro-arguments",
]
MSVC_DEFINES = [
"/DNOMINMAX", # Don't define min and max macros (windows.h)
# Don't bloat namespace with incompatible winsock versions.
"/DWIN32_LEAN_AND_MEAN",
# Don't warn about usage of insecure C functions.
"/D_CRT_SECURE_NO_WARNINGS",
"/D_SCL_SECURE_NO_WARNINGS",
# Introduced in VS 2017 15.8, allow overaligned types in aligned_storage
"/D_ENABLE_EXTENDED_ALIGNED_STORAGE",
]
COPT_VARS = {
"ABSL_GCC_FLAGS": [
ABSL_GCC_FLAGS = [
"-Wall",
"-Wextra",
"-Wcast-qual",
......@@ -65,16 +28,18 @@ COPT_VARS = {
"-Wwrite-strings",
# Don't define min and max macros (Build on Windows using gcc)
"-DNOMINMAX",
],
"ABSL_GCC_TEST_FLAGS": [
]
ABSL_GCC_TEST_ADDITIONAL_FLAGS = [
"-Wno-deprecated-declarations",
"-Wno-missing-declarations",
"-Wno-sign-compare",
"-Wno-unused-function",
"-Wno-unused-parameter",
"-Wno-unused-private-field",
],
"ABSL_LLVM_FLAGS": [
]
ABSL_LLVM_FLAGS = [
"-Wall",
"-Wextra",
"-Wcast-qual",
......@@ -113,15 +78,34 @@ COPT_VARS = {
"-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_CLANG_CL_FLAGS":
(MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES),
"ABSL_CLANG_CL_TEST_FLAGS":
LLVM_TEST_DISABLE_WARNINGS_FLAGS,
"ABSL_MSVC_FLAGS":
MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + [
]
ABSL_LLVM_TEST_ADDITIONAL_FLAGS = [
"-Wno-deprecated-declarations",
"-Wno-implicit-int-conversion",
"-Wno-missing-prototypes",
"-Wno-missing-variable-declarations",
"-Wno-shadow",
"-Wno-shorten-64-to-32",
"-Wno-sign-compare",
"-Wno-sign-conversion",
"-Wno-unreachable-code-loop-increment",
"-Wno-unused-function",
"-Wno-unused-member-function",
"-Wno-unused-parameter",
"-Wno-unused-private-field",
"-Wno-unused-template",
"-Wno-used-but-marked-unused",
# gtest depends on this GNU extension being offered.
"-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
......@@ -136,8 +120,50 @@ COPT_VARS = {
"/wd4503",
# forcing value to bool 'true' or 'false' (performance warning)
"/wd4800",
],
"ABSL_MSVC_TEST_FLAGS": [
]
MSVC_DEFINES = [
"/DNOMINMAX", # Don't define min and max macros (windows.h)
# Don't bloat namespace with incompatible winsock versions.
"/DWIN32_LEAN_AND_MEAN",
# Don't warn about usage of insecure C functions.
"/D_CRT_SECURE_NO_WARNINGS",
"/D_SCL_SECURE_NO_WARNINGS",
# Introduced in VS 2017 15.8, allow overaligned types in aligned_storage
"/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": 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,
"ABSL_CLANG_CL_TEST_FLAGS":
MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + ABSL_LLVM_TEST_ADDITIONAL_FLAGS,
"ABSL_MSVC_FLAGS":
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment