[runtimes] Synchronize warnings flags between libc++/libc++abi/libunwind
This mostly keeps the same warning flags. The most important exceptions are `-Wpedantic` and `-Wconversion`, which are now removed from libc++abi and libunwind. Reviewed By: ldionne, #libunwind, #libc, #libc_abi Spies: mikhail.ramalho, phosek, libcxx-commits Differential Revision: https://reviews.llvm.org/D144252
This commit is contained in:
parent
88eb4cbbfe
commit
a7aade1f36
7 changed files with 99 additions and 136 deletions
|
|
@ -24,6 +24,7 @@ set(LIBCXX_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
|||
set(LIBCXX_BINARY_INCLUDE_DIR "${LIBCXX_BINARY_DIR}/include/c++build")
|
||||
|
||||
include(GNUInstallDirs)
|
||||
include(WarningFlags)
|
||||
|
||||
# Require out of source build.
|
||||
include(MacroEnsureOutOfSourceBuild)
|
||||
|
|
@ -563,71 +564,6 @@ function(cxx_add_basic_build_flags target)
|
|||
target_compile_options(${target} PUBLIC "${LIBCXX_ADDITIONAL_COMPILE_FLAGS}")
|
||||
endfunction()
|
||||
|
||||
# Warning flags ===============================================================
|
||||
function(cxx_add_warning_flags target)
|
||||
target_compile_definitions(${target} PUBLIC -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
if (MSVC)
|
||||
# -W4 is the cl.exe/clang-cl equivalent of -Wall. (In cl.exe and clang-cl,
|
||||
# -Wall is equivalent to -Weverything in GCC style compiler drivers.)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -W4)
|
||||
else()
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Wall)
|
||||
endif()
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Wextra
|
||||
-W
|
||||
-Wwrite-strings
|
||||
-Wno-unused-parameter
|
||||
-Wno-long-long
|
||||
-Werror=return-type
|
||||
-Wextra-semi
|
||||
-Wundef
|
||||
-Wunused-template
|
||||
-Wformat-nonliteral)
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||
-Wno-user-defined-literals
|
||||
-Wno-covered-switch-default
|
||||
-Wno-suggest-override
|
||||
)
|
||||
if (LIBCXX_TARGETING_CLANG_CL)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||
-Wno-c++98-compat
|
||||
-Wno-c++98-compat-pedantic
|
||||
-Wno-c++11-compat
|
||||
-Wno-undef
|
||||
-Wno-reserved-id-macro
|
||||
-Wno-gnu-include-next
|
||||
-Wno-gcc-compat # For ignoring "'diagnose_if' is a clang extension" warnings
|
||||
-Wno-zero-as-null-pointer-constant # FIXME: Remove this and fix all occurrences.
|
||||
-Wno-deprecated-dynamic-exception-spec # For auto_ptr
|
||||
-Wno-sign-conversion
|
||||
-Wno-old-style-cast
|
||||
-Wno-deprecated # FIXME: Remove this and fix all occurrences.
|
||||
-Wno-shift-sign-overflow # FIXME: Why do we need this with clang-cl but not clang?
|
||||
-Wno-double-promotion # FIXME: remove me
|
||||
)
|
||||
endif()
|
||||
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||
-Wno-attributes
|
||||
-Wno-literal-suffix
|
||||
-Wno-c++14-compat
|
||||
-Wno-noexcept-type
|
||||
-Wno-suggest-override)
|
||||
endif()
|
||||
if (LIBCXX_ENABLE_WERROR)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Werror)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -WX)
|
||||
else()
|
||||
# TODO(EricWF) Remove this. We shouldn't be suppressing errors when -Werror is
|
||||
# added elsewhere.
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Wno-error)
|
||||
endif()
|
||||
if (LIBCXX_ENABLE_PEDANTIC)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -pedantic)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Exception flags =============================================================
|
||||
function(cxx_add_exception_flags target)
|
||||
if (LIBCXX_ENABLE_EXCEPTIONS)
|
||||
|
|
@ -910,7 +846,7 @@ endif()
|
|||
# Setup all common build flags =================================================
|
||||
function(cxx_add_common_build_flags target)
|
||||
cxx_add_basic_build_flags(${target})
|
||||
cxx_add_warning_flags(${target})
|
||||
cxx_add_warning_flags(${target} ${LIBCXX_ENABLE_WERROR} ${LIBCXX_ENABLE_PEDANTIC})
|
||||
cxx_add_windows_flags(${target})
|
||||
cxx_add_exception_flags(${target})
|
||||
cxx_add_rtti_flags(${target})
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ option(LIBCXXABI_ENABLE_EXCEPTIONS
|
|||
"Provide support for exceptions in the runtime.
|
||||
When disabled, libc++abi does not support stack unwinding and other exceptions-related features." ON)
|
||||
option(LIBCXXABI_ENABLE_ASSERTIONS "Enable assertions independent of build mode." ON)
|
||||
option(LIBCXXABI_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
|
||||
option(LIBCXXABI_ENABLE_PEDANTIC "Compile with pedantic enabled." OFF)
|
||||
option(LIBCXXABI_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
|
||||
option(LIBCXXABI_USE_LLVM_UNWINDER "Build and use the LLVM unwinder." OFF)
|
||||
option(LIBCXXABI_ENABLE_STATIC_UNWINDER "Statically link the LLVM unwinder." OFF)
|
||||
|
|
@ -279,41 +279,6 @@ add_definitions(-D_LIBCXXABI_BUILDING_LIBRARY)
|
|||
# it is being built as part of libcxx.
|
||||
add_definitions(-D_LIBCPP_BUILDING_LIBRARY)
|
||||
|
||||
add_compile_flags_if_supported(-Werror=return-type)
|
||||
|
||||
# Get warning flags
|
||||
add_compile_flags_if_supported(-W)
|
||||
add_compile_flags_if_supported(-Wall)
|
||||
add_compile_flags_if_supported(-Wchar-subscripts)
|
||||
add_compile_flags_if_supported(-Wconversion)
|
||||
add_compile_flags_if_supported(-Wmismatched-tags)
|
||||
add_compile_flags_if_supported(-Wmissing-braces)
|
||||
add_compile_flags_if_supported(-Wnewline-eof)
|
||||
add_compile_flags_if_supported(-Wunused-function)
|
||||
add_compile_flags_if_supported(-Wshadow)
|
||||
add_compile_flags_if_supported(-Wshorten-64-to-32)
|
||||
add_compile_flags_if_supported(-Wsign-compare)
|
||||
add_compile_flags_if_supported(-Wsign-conversion)
|
||||
add_compile_flags_if_supported(-Wstrict-aliasing=2)
|
||||
add_compile_flags_if_supported(-Wstrict-overflow=4)
|
||||
add_compile_flags_if_supported(-Wunused-parameter)
|
||||
add_compile_flags_if_supported(-Wunused-variable)
|
||||
add_compile_flags_if_supported(-Wwrite-strings)
|
||||
add_compile_flags_if_supported(-Wundef)
|
||||
|
||||
add_compile_flags_if_supported(-Wno-suggest-override)
|
||||
|
||||
if (LIBCXXABI_ENABLE_WERROR)
|
||||
add_compile_flags_if_supported(-Werror)
|
||||
add_compile_flags_if_supported(-WX)
|
||||
else()
|
||||
add_compile_flags_if_supported(-Wno-error)
|
||||
add_compile_flags_if_supported(-WX-)
|
||||
endif()
|
||||
if (LIBCXXABI_ENABLE_PEDANTIC)
|
||||
add_compile_flags_if_supported(-pedantic)
|
||||
endif()
|
||||
|
||||
# Get feature flags.
|
||||
add_compile_flags_if_supported(-fstrict-aliasing)
|
||||
|
||||
|
|
|
|||
|
|
@ -158,8 +158,11 @@ if (NOT TARGET pstl::ParallelSTL)
|
|||
message(STATUS "Could not find ParallelSTL, libc++abi will not attempt to use it but the build may fail if the libc++ in use needs it to be available.")
|
||||
endif()
|
||||
|
||||
include(WarningFlags)
|
||||
|
||||
# Build the shared library.
|
||||
add_library(cxxabi_shared_objects OBJECT EXCLUDE_FROM_ALL ${LIBCXXABI_SOURCES} ${LIBCXXABI_HEADERS})
|
||||
cxx_add_warning_flags(cxxabi_shared_objects ${LIBCXXABI_ENABLE_WERROR} ${LIBCXXABI_ENABLE_PEDANTIC})
|
||||
if (LIBCXXABI_USE_LLVM_UNWINDER)
|
||||
if (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
|
||||
target_link_libraries(cxxabi_shared_objects PUBLIC unwind_shared_objects) # propagate usage requirements
|
||||
|
|
@ -246,6 +249,7 @@ endif()
|
|||
|
||||
# Build the static library.
|
||||
add_library(cxxabi_static_objects OBJECT EXCLUDE_FROM_ALL ${LIBCXXABI_SOURCES} ${LIBCXXABI_HEADERS})
|
||||
cxx_add_warning_flags(cxxabi_static_objects ${LIBCXXABI_ENABLE_WERROR} ${LIBCXXABI_ENABLE_PEDANTIC})
|
||||
if (LIBCXXABI_USE_LLVM_UNWINDER AND LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY)
|
||||
target_link_libraries(cxxabi_static_objects PUBLIC unwind_static_objects) # propagate usage requirements
|
||||
target_sources(cxxabi_static_objects PUBLIC $<TARGET_OBJECTS:unwind_static_objects>)
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include "DemangleConfig.h"
|
||||
#include "StringView.h"
|
||||
#include "Utility.h"
|
||||
#include <__cxxabi_config.h>
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cctype>
|
||||
|
|
@ -30,6 +31,11 @@
|
|||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
#ifdef _LIBCXXABI_COMPILER_CLANG
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wunused-template"
|
||||
#endif
|
||||
|
||||
DEMANGLE_NAMESPACE_BEGIN
|
||||
|
||||
template <class T, size_t N> class PODSmallVector {
|
||||
|
|
@ -5498,4 +5504,8 @@ struct ManglingParser : AbstractManglingParser<ManglingParser<Alloc>, Alloc> {
|
|||
|
||||
DEMANGLE_NAMESPACE_END
|
||||
|
||||
#ifdef _LIBCXXABI_COMPILER_CLANG
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
#endif // DEMANGLE_ITANIUMDEMANGLE_H
|
||||
|
|
|
|||
|
|
@ -169,28 +169,6 @@ if (LIBUNWIND_ENABLE_CET)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
# Get warning flags
|
||||
add_compile_flags_if_supported(-W)
|
||||
add_compile_flags_if_supported(-Wall)
|
||||
add_compile_flags_if_supported(-Wchar-subscripts)
|
||||
add_compile_flags_if_supported(-Wconversion)
|
||||
add_compile_flags_if_supported(-Wmismatched-tags)
|
||||
add_compile_flags_if_supported(-Wmissing-braces)
|
||||
add_compile_flags_if_supported(-Wnewline-eof)
|
||||
add_compile_flags_if_supported(-Wno-unused-function)
|
||||
add_compile_flags_if_supported(-Wshadow)
|
||||
add_compile_flags_if_supported(-Wshorten-64-to-32)
|
||||
add_compile_flags_if_supported(-Wsign-compare)
|
||||
add_compile_flags_if_supported(-Wsign-conversion)
|
||||
add_compile_flags_if_supported(-Wstrict-aliasing=2)
|
||||
add_compile_flags_if_supported(-Wstrict-overflow=4)
|
||||
add_compile_flags_if_supported(-Wunused-parameter)
|
||||
add_compile_flags_if_supported(-Wunused-variable)
|
||||
add_compile_flags_if_supported(-Wwrite-strings)
|
||||
add_compile_flags_if_supported(-Wundef)
|
||||
|
||||
add_compile_flags_if_supported(-Wno-suggest-override)
|
||||
|
||||
if (WIN32)
|
||||
# The headers lack matching dllexport attributes (_LIBUNWIND_EXPORT);
|
||||
# silence the warning instead of cluttering the headers (which aren't
|
||||
|
|
@ -199,18 +177,6 @@ if (WIN32)
|
|||
add_compile_flags_if_supported(-Wno-dll-attribute-on-redeclaration)
|
||||
endif()
|
||||
|
||||
if (LIBUNWIND_ENABLE_WERROR)
|
||||
add_compile_flags_if_supported(-Werror)
|
||||
add_compile_flags_if_supported(-WX)
|
||||
else()
|
||||
add_compile_flags_if_supported(-Wno-error)
|
||||
add_compile_flags_if_supported(-WX-)
|
||||
endif()
|
||||
|
||||
if (LIBUNWIND_ENABLE_PEDANTIC)
|
||||
add_compile_flags_if_supported(-pedantic)
|
||||
endif()
|
||||
|
||||
# Get feature flags.
|
||||
# Exceptions
|
||||
# Catches C++ exceptions only and tells the compiler to assume that extern C
|
||||
|
|
|
|||
|
|
@ -135,8 +135,11 @@ set_property(SOURCE ${LIBUNWIND_C_SOURCES}
|
|||
# ease, but does not rely on C++ at runtime.
|
||||
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
|
||||
|
||||
include(WarningFlags)
|
||||
|
||||
# Build the shared library.
|
||||
add_library(unwind_shared_objects OBJECT EXCLUDE_FROM_ALL ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS})
|
||||
cxx_add_warning_flags(unwind_shared_objects ${LIBUNWIND_ENABLE_WERROR} ${LIBUNWIND_ENABLE_PEDANTIC})
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL MSVC)
|
||||
target_compile_options(unwind_shared_objects PRIVATE /GR-)
|
||||
else()
|
||||
|
|
@ -174,6 +177,7 @@ endif()
|
|||
|
||||
# Build the static library.
|
||||
add_library(unwind_static_objects OBJECT EXCLUDE_FROM_ALL ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS})
|
||||
cxx_add_warning_flags(unwind_static_objects ${LIBUNWIND_ENABLE_WERROR} ${LIBUNWIND_ENABLE_PEDANTIC})
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL MSVC)
|
||||
target_compile_options(unwind_static_objects PRIVATE /GR-)
|
||||
else()
|
||||
|
|
|
|||
78
runtimes/cmake/Modules/WarningFlags.cmake
Normal file
78
runtimes/cmake/Modules/WarningFlags.cmake
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
include(HandleFlags)
|
||||
|
||||
# Warning flags ===============================================================
|
||||
function(cxx_add_warning_flags target enable_werror enable_pedantic)
|
||||
target_compile_definitions(${target} PUBLIC -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
if (MSVC)
|
||||
# -W4 is the cl.exe/clang-cl equivalent of -Wall. (In cl.exe and clang-cl,
|
||||
# -Wall is equivalent to -Weverything in GCC style compiler drivers.)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -W4)
|
||||
else()
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Wall)
|
||||
endif()
|
||||
# TODO: Should -Wconversion be enabled?
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wnewline-eof
|
||||
-Wshadow
|
||||
-Wwrite-strings
|
||||
-Wno-unused-parameter
|
||||
-Wno-long-long
|
||||
-Werror=return-type
|
||||
-Wextra-semi
|
||||
-Wundef
|
||||
-Wunused-template
|
||||
-Wformat-nonliteral
|
||||
)
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||
-Wno-user-defined-literals
|
||||
-Wno-covered-switch-default
|
||||
-Wno-suggest-override
|
||||
)
|
||||
if (LIBCXX_TARGETING_CLANG_CL)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||
-Wno-c++98-compat
|
||||
-Wno-c++98-compat-pedantic
|
||||
-Wno-c++11-compat
|
||||
-Wno-undef
|
||||
-Wno-reserved-id-macro
|
||||
-Wno-gnu-include-next
|
||||
-Wno-gcc-compat # For ignoring "'diagnose_if' is a clang extension" warnings
|
||||
-Wno-zero-as-null-pointer-constant # FIXME: Remove this and fix all occurrences.
|
||||
-Wno-deprecated-dynamic-exception-spec # For auto_ptr
|
||||
-Wno-sign-conversion
|
||||
-Wno-old-style-cast
|
||||
-Wno-deprecated # FIXME: Remove this and fix all occurrences.
|
||||
-Wno-shift-sign-overflow # FIXME: Why do we need this with clang-cl but not clang?
|
||||
-Wno-double-promotion # FIXME: remove me
|
||||
)
|
||||
endif()
|
||||
|
||||
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
|
||||
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE
|
||||
-Wstrict-aliasing=2
|
||||
-Wstrict-overflow=4
|
||||
-Wno-attributes
|
||||
-Wno-literal-suffix
|
||||
-Wno-c++14-compat
|
||||
-Wno-noexcept-type
|
||||
-Wno-suggest-override
|
||||
)
|
||||
|
||||
endif()
|
||||
if (${enable_werror})
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Werror)
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -WX)
|
||||
else()
|
||||
# TODO(EricWF) Remove this. We shouldn't be suppressing errors when -Werror is
|
||||
# added elsewhere.
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -Wno-error)
|
||||
endif()
|
||||
if (${enable_pedantic})
|
||||
target_add_compile_flags_if_supported(${target} PRIVATE -pedantic)
|
||||
endif()
|
||||
endfunction()
|
||||
Loading…
Reference in a new issue