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
This commit is contained in:
Abseil Team 2017-12-21 19:39:42 -08:00 committed by Xiaoyi Zhang
parent ff70456473
commit 17cde19a0f
6 changed files with 50 additions and 15 deletions

View file

@ -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

View file

@ -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

View file

@ -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;
};

View file

@ -438,6 +438,20 @@ TEST(AllocatorTraits, Typedefs) {
absl::allocator_traits<NonEmpty>::is_always_equal>::value));
}
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 {};

View file

@ -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);

View file

@ -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)