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:
parent
ff70456473
commit
17cde19a0f
6 changed files with 50 additions and 15 deletions
|
@ -138,9 +138,10 @@
|
||||||
// supported.
|
// supported.
|
||||||
#ifdef ABSL_HAVE_THREAD_LOCAL
|
#ifdef ABSL_HAVE_THREAD_LOCAL
|
||||||
#error ABSL_HAVE_THREAD_LOCAL cannot be directly set
|
#error ABSL_HAVE_THREAD_LOCAL cannot be directly set
|
||||||
#elif !defined(__apple_build_version__) || \
|
#elif (!defined(__apple_build_version__) || \
|
||||||
((__apple_build_version__ >= 8000042) && \
|
(__apple_build_version__ >= 8000042)) && \
|
||||||
!(TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0))
|
!(defined(__APPLE__) && TARGET_OS_IPHONE && \
|
||||||
|
__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0)
|
||||||
// Notes: Xcode's clang did not support `thread_local` until version
|
// Notes: Xcode's clang did not support `thread_local` until version
|
||||||
// 8, and even then not for all iOS < 9.0.
|
// 8, and even then not for all iOS < 9.0.
|
||||||
#define ABSL_HAVE_THREAD_LOCAL 1
|
#define ABSL_HAVE_THREAD_LOCAL 1
|
||||||
|
|
|
@ -10,7 +10,6 @@ GCC_FLAGS = [
|
||||||
"-Wcast-qual",
|
"-Wcast-qual",
|
||||||
"-Wconversion-null",
|
"-Wconversion-null",
|
||||||
"-Wmissing-declarations",
|
"-Wmissing-declarations",
|
||||||
"-Wno-sign-compare",
|
|
||||||
"-Woverlength-strings",
|
"-Woverlength-strings",
|
||||||
"-Wpointer-arith",
|
"-Wpointer-arith",
|
||||||
"-Wunused-local-typedefs",
|
"-Wunused-local-typedefs",
|
||||||
|
@ -18,6 +17,9 @@ GCC_FLAGS = [
|
||||||
"-Wvarargs",
|
"-Wvarargs",
|
||||||
"-Wvla", # variable-length array
|
"-Wvla", # variable-length array
|
||||||
"-Wwrite-strings",
|
"-Wwrite-strings",
|
||||||
|
# Google style does not use unsigned integers, though STL containers
|
||||||
|
# have unsigned types.
|
||||||
|
"-Wno-sign-compare",
|
||||||
]
|
]
|
||||||
|
|
||||||
GCC_TEST_FLAGS = [
|
GCC_TEST_FLAGS = [
|
||||||
|
@ -34,36 +36,43 @@ GCC_TEST_FLAGS = [
|
||||||
# Docs on groups of flags is preceded by ###.
|
# Docs on groups of flags is preceded by ###.
|
||||||
|
|
||||||
LLVM_FLAGS = [
|
LLVM_FLAGS = [
|
||||||
|
# All warnings are treated as errors by implicit -Werror flag
|
||||||
"-Wall",
|
"-Wall",
|
||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Weverything",
|
"-Weverything",
|
||||||
# Abseil does not support C++98
|
# Abseil does not support C++98
|
||||||
"-Wno-c++98-compat-pedantic",
|
"-Wno-c++98-compat-pedantic",
|
||||||
"-Wno-comma",
|
|
||||||
# Turns off all implicit conversion warnings. Most are re-enabled below.
|
# Turns off all implicit conversion warnings. Most are re-enabled below.
|
||||||
"-Wno-conversion",
|
"-Wno-conversion",
|
||||||
"-Wno-covered-switch-default",
|
"-Wno-covered-switch-default",
|
||||||
"-Wno-deprecated",
|
"-Wno-deprecated",
|
||||||
"-Wno-disabled-macro-expansion",
|
"-Wno-disabled-macro-expansion",
|
||||||
"-Wno-double-promotion",
|
"-Wno-double-promotion",
|
||||||
"-Wno-exit-time-destructors",
|
###
|
||||||
|
# Turned off as they include valid C++ code.
|
||||||
|
"-Wno-comma",
|
||||||
"-Wno-extra-semi",
|
"-Wno-extra-semi",
|
||||||
|
"-Wno-packed",
|
||||||
|
"-Wno-padded",
|
||||||
|
###
|
||||||
"-Wno-float-conversion",
|
"-Wno-float-conversion",
|
||||||
"-Wno-float-equal",
|
"-Wno-float-equal",
|
||||||
"-Wno-format-nonliteral",
|
"-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",
|
"-Wno-gcc-compat",
|
||||||
|
###
|
||||||
|
# Some internal globals are necessary. Don't do this at home.
|
||||||
"-Wno-global-constructors",
|
"-Wno-global-constructors",
|
||||||
|
"-Wno-exit-time-destructors",
|
||||||
|
###
|
||||||
"-Wno-nested-anon-types",
|
"-Wno-nested-anon-types",
|
||||||
"-Wno-non-modular-include-in-module",
|
"-Wno-non-modular-include-in-module",
|
||||||
"-Wno-old-style-cast",
|
"-Wno-old-style-cast",
|
||||||
"-Wno-packed",
|
|
||||||
"-Wno-padded",
|
|
||||||
# Warns on preferred usage of non-POD types such as string_view
|
# Warns on preferred usage of non-POD types such as string_view
|
||||||
"-Wno-range-loop-analysis",
|
"-Wno-range-loop-analysis",
|
||||||
"-Wno-reserved-id-macro",
|
"-Wno-reserved-id-macro",
|
||||||
"-Wno-shorten-64-to-32",
|
"-Wno-shorten-64-to-32",
|
||||||
"-Wno-sign-conversion",
|
|
||||||
"-Wno-switch-enum",
|
"-Wno-switch-enum",
|
||||||
"-Wno-thread-safety-negative",
|
"-Wno-thread-safety-negative",
|
||||||
"-Wno-undef",
|
"-Wno-undef",
|
||||||
|
@ -84,6 +93,7 @@ LLVM_FLAGS = [
|
||||||
"-Wnon-literal-null-conversion",
|
"-Wnon-literal-null-conversion",
|
||||||
"-Wnull-conversion",
|
"-Wnull-conversion",
|
||||||
"-Wobjc-literal-conversion",
|
"-Wobjc-literal-conversion",
|
||||||
|
"-Wno-sign-conversion",
|
||||||
"-Wstring-conversion",
|
"-Wstring-conversion",
|
||||||
###
|
###
|
||||||
]
|
]
|
||||||
|
@ -108,7 +118,7 @@ LLVM_TEST_FLAGS = [
|
||||||
MSVC_FLAGS = [
|
MSVC_FLAGS = [
|
||||||
"/W3",
|
"/W3",
|
||||||
"/WX",
|
"/WX",
|
||||||
"/wd4005", # macro-redifinition
|
"/wd4005", # macro-redefinition
|
||||||
"/wd4068", # unknown pragma
|
"/wd4068", # unknown pragma
|
||||||
"/wd4244", # conversion from 'type1' to 'type2', possible loss of data
|
"/wd4244", # conversion from 'type1' to 'type2', possible loss of data
|
||||||
"/wd4267", # conversion from 'size_t' to 'type', possible loss of data
|
"/wd4267", # conversion from 'size_t' to 'type', possible loss of data
|
||||||
|
|
|
@ -319,13 +319,23 @@ struct RebindPtr<T, U, void_t<typename T::template rebind<U>>> {
|
||||||
using type = 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 {
|
struct RebindAlloc {
|
||||||
using type = typename RebindFirstArg<T, U>::type;
|
using type = typename RebindFirstArg<T, U>::type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename U>
|
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;
|
using type = typename T::template rebind<U>::other;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -438,6 +438,20 @@ TEST(AllocatorTraits, Typedefs) {
|
||||||
absl::allocator_traits<NonEmpty>::is_always_equal>::value));
|
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>
|
template <typename T>
|
||||||
struct Rebound {};
|
struct Rebound {};
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ std::string HexStringToBytes(absl::string_view from);
|
||||||
|
|
||||||
// BytesToHexString()
|
// 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()`.
|
// `2*from.size()`.
|
||||||
std::string BytesToHexString(absl::string_view from);
|
std::string BytesToHexString(absl::string_view from);
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ class Arg {
|
||||||
//
|
//
|
||||||
// Explicitly overload `const char*` so the compiler doesn't cast to `bool`.
|
// Explicitly overload `const char*` so the compiler doesn't cast to `bool`.
|
||||||
Arg(const char* value) // NOLINT(runtime/explicit)
|
Arg(const char* value) // NOLINT(runtime/explicit)
|
||||||
: piece_(value) {}
|
: piece_(absl::NullSafeStringView(value)) {}
|
||||||
Arg(const std::string& value) // NOLINT(runtime/explicit)
|
Arg(const std::string& value) // NOLINT(runtime/explicit)
|
||||||
: piece_(value) {}
|
: piece_(value) {}
|
||||||
Arg(absl::string_view value) // NOLINT(runtime/explicit)
|
Arg(absl::string_view value) // NOLINT(runtime/explicit)
|
||||||
|
|
Loading…
Reference in a new issue