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…
	
	Add table
		Add a link
		
	
		Reference in a new issue