diff options
author | Abseil Team <absl-team@google.com> | 2017-12-21 19:39:42 -0800 |
---|---|---|
committer | Xiaoyi Zhang <zhangxy988@gmail.com> | 2017-12-22 15:08:21 -0500 |
commit | 17cde19a0f8c939524295d27c3774186ac9a1d29 (patch) | |
tree | 5e10511803413133dc4b0a6b85663a624ea5e9e0 | |
parent | ff7045647330f5dc21725a42456091207f3eecd5 (diff) |
Changes imported from Abseil "staging" branch:
- f13b203bb87afd3a9330030fb97a1318083d8618 Fix SubstituteTest under C++17 with libc++. by Derek Mauro <dmauro@google.com>
- c551cdf6f70afac3f8ca143f4837f2187715eea9 Fix ABSL_HAVE_THREAD_LOCAL macro for Apple platforms. by Abseil Team <absl-team@google.com>
- 931020efc43c184c4124975f50a02b377d960f9d Add Abseil Compilers Guide by Tom Manshreck <shreck@google.com>
- 658f924ca7136c7994290955c5666b60da6ca5b9 Reimplement the SFINAE for allocator_traits::rebind to av... by Abseil Team <absl-team@google.com>
- 4cb04fa739f70dd5ad0c8421ff4c444645136c7f Fix minor spelling error of 'returning'. by Abseil Team <absl-team@google.com>
GitOrigin-RevId: f13b203bb87afd3a9330030fb97a1318083d8618
Change-Id: I8573087795a50f8cc8367b0af1aedfbd2a89a793
-rw-r--r-- | absl/base/config.h | 7 | ||||
-rw-r--r-- | absl/copts.bzl | 26 | ||||
-rw-r--r-- | absl/memory/memory.h | 14 | ||||
-rw-r--r-- | absl/memory/memory_test.cc | 14 | ||||
-rw-r--r-- | absl/strings/escaping.h | 2 | ||||
-rw-r--r-- | absl/strings/substitute.h | 2 |
6 files changed, 50 insertions, 15 deletions
diff --git a/absl/base/config.h b/absl/base/config.h index 3f3b8b3..6703d0e 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 fa111a0..20c9b61 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 22d44b9..2220ee4 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 7d047ca..dee9b48 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 86f63aa..1af0afa 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 3fc4ac4..76d6d8e 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) |