summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--absl/base/config.h7
-rw-r--r--absl/copts.bzl26
-rw-r--r--absl/memory/memory.h14
-rw-r--r--absl/memory/memory_test.cc14
-rw-r--r--absl/strings/escaping.h2
-rw-r--r--absl/strings/substitute.h2
6 files changed, 50 insertions, 15 deletions
diff --git a/absl/base/config.h b/absl/base/config.h
index 3f3b8b3a..6703d0ea 100644
--- a/absl/base/config.h
+++ b/absl/base/config.h
@@ -138,9 +138,10 @@
// supported.
#ifdef ABSL_HAVE_THREAD_LOCAL
#error ABSL_HAVE_THREAD_LOCAL cannot be directly set
-#elif !defined(__apple_build_version__) || \
- ((__apple_build_version__ >= 8000042) && \
- !(TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0))
+#elif (!defined(__apple_build_version__) || \
+ (__apple_build_version__ >= 8000042)) && \
+ !(defined(__APPLE__) && TARGET_OS_IPHONE && \
+ __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0)
// Notes: Xcode's clang did not support `thread_local` until version
// 8, and even then not for all iOS < 9.0.
#define ABSL_HAVE_THREAD_LOCAL 1
diff --git a/absl/copts.bzl b/absl/copts.bzl
index fa111a00..20c9b619 100644
--- a/absl/copts.bzl
+++ b/absl/copts.bzl
@@ -10,7 +10,6 @@ GCC_FLAGS = [
"-Wcast-qual",
"-Wconversion-null",
"-Wmissing-declarations",
- "-Wno-sign-compare",
"-Woverlength-strings",
"-Wpointer-arith",
"-Wunused-local-typedefs",
@@ -18,6 +17,9 @@ GCC_FLAGS = [
"-Wvarargs",
"-Wvla", # variable-length array
"-Wwrite-strings",
+ # Google style does not use unsigned integers, though STL containers
+ # have unsigned types.
+ "-Wno-sign-compare",
]
GCC_TEST_FLAGS = [
@@ -34,36 +36,43 @@ GCC_TEST_FLAGS = [
# Docs on groups of flags is preceded by ###.
LLVM_FLAGS = [
+ # All warnings are treated as errors by implicit -Werror flag
"-Wall",
"-Wextra",
"-Weverything",
# Abseil does not support C++98
"-Wno-c++98-compat-pedantic",
- "-Wno-comma",
# Turns off all implicit conversion warnings. Most are re-enabled below.
"-Wno-conversion",
"-Wno-covered-switch-default",
"-Wno-deprecated",
"-Wno-disabled-macro-expansion",
"-Wno-double-promotion",
- "-Wno-exit-time-destructors",
+ ###
+ # Turned off as they include valid C++ code.
+ "-Wno-comma",
"-Wno-extra-semi",
+ "-Wno-packed",
+ "-Wno-padded",
+ ###
"-Wno-float-conversion",
"-Wno-float-equal",
"-Wno-format-nonliteral",
- # Too aggressive: warns on Clang extensions enclosed in Clang-only code paths.
+ # Too aggressive: warns on Clang extensions enclosed in Clang-only
+ # compilation paths.
"-Wno-gcc-compat",
+ ###
+ # Some internal globals are necessary. Don't do this at home.
"-Wno-global-constructors",
+ "-Wno-exit-time-destructors",
+ ###
"-Wno-nested-anon-types",
"-Wno-non-modular-include-in-module",
"-Wno-old-style-cast",
- "-Wno-packed",
- "-Wno-padded",
# Warns on preferred usage of non-POD types such as string_view
"-Wno-range-loop-analysis",
"-Wno-reserved-id-macro",
"-Wno-shorten-64-to-32",
- "-Wno-sign-conversion",
"-Wno-switch-enum",
"-Wno-thread-safety-negative",
"-Wno-undef",
@@ -84,6 +93,7 @@ LLVM_FLAGS = [
"-Wnon-literal-null-conversion",
"-Wnull-conversion",
"-Wobjc-literal-conversion",
+ "-Wno-sign-conversion",
"-Wstring-conversion",
###
]
@@ -108,7 +118,7 @@ LLVM_TEST_FLAGS = [
MSVC_FLAGS = [
"/W3",
"/WX",
- "/wd4005", # macro-redifinition
+ "/wd4005", # macro-redefinition
"/wd4068", # unknown pragma
"/wd4244", # conversion from 'type1' to 'type2', possible loss of data
"/wd4267", # conversion from 'size_t' to 'type', possible loss of data
diff --git a/absl/memory/memory.h b/absl/memory/memory.h
index 22d44b9e..2220ee4e 100644
--- a/absl/memory/memory.h
+++ b/absl/memory/memory.h
@@ -319,13 +319,23 @@ struct RebindPtr<T, U, void_t<typename T::template rebind<U>>> {
using type = typename T::template rebind<U>;
};
-template <typename T, typename U, typename = void>
+template <typename T, typename U>
+constexpr bool HasRebindAlloc(...) {
+ return false;
+}
+
+template <typename T, typename U>
+constexpr bool HasRebindAlloc(typename T::template rebind<U>::other*) {
+ return true;
+}
+
+template <typename T, typename U, bool = HasRebindAlloc<T, U>(nullptr)>
struct RebindAlloc {
using type = typename RebindFirstArg<T, U>::type;
};
template <typename T, typename U>
-struct RebindAlloc<T, U, void_t<typename T::template rebind<U>::other>> {
+struct RebindAlloc<T, U, true> {
using type = typename T::template rebind<U>::other;
};
diff --git a/absl/memory/memory_test.cc b/absl/memory/memory_test.cc
index 7d047ca0..dee9b486 100644
--- a/absl/memory/memory_test.cc
+++ b/absl/memory/memory_test.cc
@@ -439,6 +439,20 @@ TEST(AllocatorTraits, Typedefs) {
}
template <typename T>
+struct AllocWithPrivateInheritance : private std::allocator<T> {
+ using value_type = T;
+};
+
+TEST(AllocatorTraits, RebindWithPrivateInheritance) {
+ // Regression test for some versions of gcc that do not like the sfinae we
+ // used in combination with private inheritance.
+ EXPECT_TRUE(
+ (std::is_same<AllocWithPrivateInheritance<int>,
+ absl::allocator_traits<AllocWithPrivateInheritance<char>>::
+ rebind_alloc<int>>::value));
+}
+
+template <typename T>
struct Rebound {};
struct AllocWithRebind {
diff --git a/absl/strings/escaping.h b/absl/strings/escaping.h
index 86f63aad..1af0afa7 100644
--- a/absl/strings/escaping.h
+++ b/absl/strings/escaping.h
@@ -152,7 +152,7 @@ std::string HexStringToBytes(absl::string_view from);
// BytesToHexString()
//
-// Converts binary data into an ASCII text std::string, returing a std::string of size
+// Converts binary data into an ASCII text std::string, returning a std::string of size
// `2*from.size()`.
std::string BytesToHexString(absl::string_view from);
diff --git a/absl/strings/substitute.h b/absl/strings/substitute.h
index 3fc4ac4c..76d6d8e9 100644
--- a/absl/strings/substitute.h
+++ b/absl/strings/substitute.h
@@ -109,7 +109,7 @@ class Arg {
//
// Explicitly overload `const char*` so the compiler doesn't cast to `bool`.
Arg(const char* value) // NOLINT(runtime/explicit)
- : piece_(value) {}
+ : piece_(absl::NullSafeStringView(value)) {}
Arg(const std::string& value) // NOLINT(runtime/explicit)
: piece_(value) {}
Arg(absl::string_view value) // NOLINT(runtime/explicit)