Commit c03c18e7 by Abseil Team Committed by Andy Getz

Export of internal Abseil changes

--
9c9eb300c95024ea4242bbb4835595f555cb1eed by Derek Mauro <dmauro@google.com>:

Sync string_view comments from the internal copy

PiperOrigin-RevId: 328582796

--
c0bc4e77a46889430a1a40d836a5ff426a4a5bc9 by Xiaoyi Zhang <zhangxy@google.com>:

Make `absl::allocator_traits` an alias to `std::allocator_traits` for C++17 or
above. `std::allocator_traits` should have all its members since C++17 so we
don't need a backport.

PiperOrigin-RevId: 328258154

--
5599a3c0f2d865128057b5e267a397011cd032d0 by Derek Mauro <dmauro@google.com>:

Fix an #endif comment

Reported at https://groups.google.com/g/abseil-io/c/GRUdB0bBrG8/m/852HrgchCQAJ

PiperOrigin-RevId: 328247093

--
abd7e98088267f436e6c10779e574153ece015be by Abseil Team <absl-team@google.com>:

Don't call win32 APIs for UWP builds

symbolize.cc is including symbolize_win32.inc for all Windows builds,
including UWP builds. However, UWP doesn't have access to win32 APIs, so
it should instead include symbolize_unimplemented.inc.

This allows the necessary functions to still exist and be called, but
the win32 calls are not made.

This is part of the effort to enable Abseil in ANGLE:
https://anglebug.com/4873

PiperOrigin-RevId: 328226766

--
f622d3dfb804a6f427c1fd86ee69f47785b49483 by Greg Falcon <gfalcon@google.com>:

Remove incorrect claims of HASH_NAMESPACE support in Abseil hash.

The documentation presently claims that absl::Hash will look for legacy hashers (e.g, in the __gnu_cxx namespace) as controlled by the HASH_NAMESPACE preprocessor define, but this has never been true.

(Vestigial support for this appears in the form `ABSL_INTERNAL_LEGACY_HASH_NAMESPACE`, but this is not a supported extension point, as indicated by the use of `INTERNAL` in the name.)

PiperOrigin-RevId: 328154123

--
32b40a25efe1f7f7da98ce8faf3482c825464ed4 by Abseil Team <absl-team@google.com>:

Switch ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED checks to defined().

PiperOrigin-RevId: 328151556
GitOrigin-RevId: 9c9eb300c95024ea4242bbb4835595f555cb1eed
Change-Id: Ib0686286f7889a976311e8cd2b35655765a8d033
parent b321ad86
...@@ -83,12 +83,9 @@ ...@@ -83,12 +83,9 @@
#define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 1 #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 1
#if !defined(SWIG) #if !defined(SWIG)
#define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1 #define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1
#else
#define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 0
#endif #endif
#else #else
#define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0 #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0
#define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 0
#endif #endif
// Read/write annotations are enabled in Annotalysis mode; disabled otherwise. // Read/write annotations are enabled in Annotalysis mode; disabled otherwise.
...@@ -271,19 +268,19 @@ ABSL_INTERNAL_END_EXTERN_C ...@@ -271,19 +268,19 @@ ABSL_INTERNAL_END_EXTERN_C
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Define IGNORE_READS_BEGIN/_END attributes. // Define IGNORE_READS_BEGIN/_END attributes.
#if ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED == 1 #if defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
#define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \ #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \
__attribute((exclusive_lock_function("*"))) __attribute((exclusive_lock_function("*")))
#define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \ #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \
__attribute((unlock_function("*"))) __attribute((unlock_function("*")))
#else // ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED == 0 #else // !defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
#define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE // empty #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE // empty
#define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE // empty #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE // empty
#endif // ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED #endif // defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Define IGNORE_READS_BEGIN/_END annotations. // Define IGNORE_READS_BEGIN/_END annotations.
......
...@@ -58,8 +58,6 @@ ...@@ -58,8 +58,6 @@
#if defined(__clang__) && !defined(SWIG) #if defined(__clang__) && !defined(SWIG)
#define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1 #define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1
#else
#define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 0
#endif #endif
#if DYNAMIC_ANNOTATIONS_ENABLED != 0 #if DYNAMIC_ANNOTATIONS_ENABLED != 0
...@@ -84,7 +82,7 @@ ...@@ -84,7 +82,7 @@
// ANNOTALYSIS_ENABLED == 1 when IGNORE_READ_ATTRIBUTE_ENABLED == 1 // ANNOTALYSIS_ENABLED == 1 when IGNORE_READ_ATTRIBUTE_ENABLED == 1
#define ABSL_INTERNAL_ANNOTALYSIS_ENABLED \ #define ABSL_INTERNAL_ANNOTALYSIS_ENABLED \
ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
// Read/write annotations are enabled in Annotalysis mode; disabled otherwise. // Read/write annotations are enabled in Annotalysis mode; disabled otherwise.
#define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED \ #define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED \
ABSL_INTERNAL_ANNOTALYSIS_ENABLED ABSL_INTERNAL_ANNOTALYSIS_ENABLED
...@@ -247,19 +245,19 @@ ...@@ -247,19 +245,19 @@
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Define IGNORE_READS_BEGIN/_END attributes. // Define IGNORE_READS_BEGIN/_END attributes.
#if ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED == 1 #if defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
#define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \ #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \
__attribute((exclusive_lock_function("*"))) __attribute((exclusive_lock_function("*")))
#define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \ #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \
__attribute((unlock_function("*"))) __attribute((unlock_function("*")))
#else // ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED == 0 #else // !defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
#define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE // empty #define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE // empty
#define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE // empty #define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE // empty
#endif // ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED #endif // defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED)
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Define IGNORE_READS_BEGIN/_END annotations. // Define IGNORE_READS_BEGIN/_END annotations.
......
...@@ -186,7 +186,7 @@ class HashtablezInfoHandle { ...@@ -186,7 +186,7 @@ class HashtablezInfoHandle {
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) #if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
extern ABSL_PER_THREAD_TLS_KEYWORD int64_t global_next_sample; extern ABSL_PER_THREAD_TLS_KEYWORD int64_t global_next_sample;
#endif // ABSL_PER_THREAD_TLS #endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
// Returns an RAII sampling handle that manages registration and unregistation // Returns an RAII sampling handle that manages registration and unregistation
// with the global sampler. // with the global sampler.
......
...@@ -14,9 +14,18 @@ ...@@ -14,9 +14,18 @@
#include "absl/debugging/symbolize.h" #include "absl/debugging/symbolize.h"
#ifdef _WIN32
#include <winapifamily.h>
#if !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) || \
WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// UWP doesn't have access to win32 APIs.
#define ABSL_INTERNAL_HAVE_SYMBOLIZE_WIN32
#endif
#endif
#if defined(ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE) #if defined(ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE)
#include "absl/debugging/symbolize_elf.inc" #include "absl/debugging/symbolize_elf.inc"
#elif defined(_WIN32) #elif defined(ABSL_INTERNAL_HAVE_SYMBOLIZE_WIN32)
// The Windows Symbolizer only works if PDB files containing the debug info // The Windows Symbolizer only works if PDB files containing the debug info
// are available to the program at runtime. // are available to the program at runtime.
#include "absl/debugging/symbolize_win32.inc" #include "absl/debugging/symbolize_win32.inc"
......
...@@ -88,7 +88,6 @@ ABSL_NAMESPACE_BEGIN ...@@ -88,7 +88,6 @@ ABSL_NAMESPACE_BEGIN
// * T is an arithmetic or pointer type // * T is an arithmetic or pointer type
// * T defines an overload for `AbslHashValue(H, const T&)` for an arbitrary // * T defines an overload for `AbslHashValue(H, const T&)` for an arbitrary
// hash state `H`. // hash state `H`.
// - T defines a specialization of `HASH_NAMESPACE::hash<T>`
// - T defines a specialization of `std::hash<T>` // - T defines a specialization of `std::hash<T>`
// //
// `absl::Hash` intrinsically supports the following types: // `absl::Hash` intrinsically supports the following types:
...@@ -128,8 +127,6 @@ ABSL_NAMESPACE_BEGIN ...@@ -128,8 +127,6 @@ ABSL_NAMESPACE_BEGIN
// * Natively supported types out of the box (see above) // * Natively supported types out of the box (see above)
// * Types for which an `AbslHashValue()` overload is provided (such as // * Types for which an `AbslHashValue()` overload is provided (such as
// user-defined types). See "Adding Type Support to `absl::Hash`" below. // user-defined types). See "Adding Type Support to `absl::Hash`" below.
// * Types which define a `HASH_NAMESPACE::hash<T>` specialization (aka
// `__gnu_cxx::hash<T>` for gcc/Clang or `stdext::hash<T>` for MSVC)
// * Types which define a `std::hash<T>` specialization // * Types which define a `std::hash<T>` specialization
// //
// The fallback to legacy hash functions exists mainly for backwards // The fallback to legacy hash functions exists mainly for backwards
......
...@@ -420,6 +420,9 @@ struct pointer_traits<T*> { ...@@ -420,6 +420,9 @@ struct pointer_traits<T*> {
// //
// A C++11 compatible implementation of C++17's std::allocator_traits. // A C++11 compatible implementation of C++17's std::allocator_traits.
// //
#if __cplusplus >= 201703L
using std::allocator_traits;
#else // __cplusplus >= 201703L
template <typename Alloc> template <typename Alloc>
struct allocator_traits { struct allocator_traits {
using allocator_type = Alloc; using allocator_type = Alloc;
...@@ -609,6 +612,7 @@ struct allocator_traits { ...@@ -609,6 +612,7 @@ struct allocator_traits {
return a; return a;
} }
}; };
#endif // __cplusplus >= 201703L
namespace memory_internal { namespace memory_internal {
......
...@@ -555,7 +555,7 @@ TEST(AllocatorTraits, FunctionsMinimal) { ...@@ -555,7 +555,7 @@ TEST(AllocatorTraits, FunctionsMinimal) {
EXPECT_CALL(mock, deallocate(&x, 7)); EXPECT_CALL(mock, deallocate(&x, 7));
EXPECT_EQ(&x, Traits::allocate(mock, 7)); EXPECT_EQ(&x, Traits::allocate(mock, 7));
Traits::allocate(mock, 7, static_cast<const void*>(&hint)); static_cast<void>(Traits::allocate(mock, 7, static_cast<const void*>(&hint)));
EXPECT_EQ(&x, Traits::allocate(mock, 7, static_cast<const void*>(&hint))); EXPECT_EQ(&x, Traits::allocate(mock, 7, static_cast<const void*>(&hint)));
Traits::deallocate(mock, &x, 7); Traits::deallocate(mock, &x, 7);
......
...@@ -111,6 +111,11 @@ ABSL_NAMESPACE_BEGIN ...@@ -111,6 +111,11 @@ ABSL_NAMESPACE_BEGIN
// example, when splitting a string, `std::vector<absl::string_view>` is a // example, when splitting a string, `std::vector<absl::string_view>` is a
// natural data type for the output. // natural data type for the output.
// //
// For another example, a Cord is a non-contiguous, potentially very
// long string-like object. The Cord class has an interface that iteratively
// provides string_view objects that point to the successive pieces of a Cord
// object.
//
// When constructed from a source which is NUL-terminated, the `string_view` // When constructed from a source which is NUL-terminated, the `string_view`
// itself will not include the NUL-terminator unless a specific size (including // itself will not include the NUL-terminator unless a specific size (including
// the NUL) is passed to the constructor. As a result, common idioms that work // the NUL) is passed to the constructor. As a result, common idioms that work
...@@ -382,6 +387,7 @@ class string_view { ...@@ -382,6 +387,7 @@ class string_view {
// Returns a "substring" of the `string_view` (at offset `pos` and length // Returns a "substring" of the `string_view` (at offset `pos` and length
// `n`) as another string_view. This function throws `std::out_of_bounds` if // `n`) as another string_view. This function throws `std::out_of_bounds` if
// `pos > size`. // `pos > size`.
// Use absl::ClippedSubstr if you need a truncating substr operation.
constexpr string_view substr(size_type pos, size_type n = npos) const { constexpr string_view substr(size_type pos, size_type n = npos) const {
return ABSL_PREDICT_FALSE(pos > length_) return ABSL_PREDICT_FALSE(pos > length_)
? (base_internal::ThrowStdOutOfRange( ? (base_internal::ThrowStdOutOfRange(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment