Export of internal Abseil changes
-- f51743aa96e19aa3dda96d09d313b4390f1d61e7 by CJ Johnson <johnsoncj@google.com>: Minor touchup on the InlinedVector/Storage internal header file PiperOrigin-RevId: 262389640 -- e2f54c1f7142e40d30ff0fda43bef050625821a5 by Abseil Team <absl-team@google.com>: Update the absl codebase to use proper marketing names for macOS and Xcode PiperOrigin-RevId: 262389450 -- f29aae774edd0d00e2daa1fb96694a6dc3565a55 by CJ Johnson <johnsoncj@google.com>: Blocks code generator script from being affected by LTS inline namespaces PiperOrigin-RevId: 262376791 GitOrigin-RevId: f51743aa96e19aa3dda96d09d313b4390f1d61e7 Change-Id: I33be7f5a708ce8a2b7111b00151e43d73c5e0009
This commit is contained in:
		
							parent
							
								
									8efba58a3b
								
							
						
					
					
						commit
						9ee91d3e43
					
				
					 11 changed files with 118 additions and 94 deletions
				
			
		| 
						 | 
					@ -43,7 +43,7 @@ the Abseil code, running tests, and getting a simple binary working.
 | 
				
			||||||
## Building Abseil
 | 
					## Building Abseil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Bazel](https://bazel.build) is the official build system for Abseil,
 | 
					[Bazel](https://bazel.build) is the official build system for Abseil,
 | 
				
			||||||
which is supported on most major platforms (Linux, Windows, MacOS, for example)
 | 
					which is supported on most major platforms (Linux, Windows, macOS, for example)
 | 
				
			||||||
and compilers. See the [quickstart](https://abseil.io/docs/cpp/quickstart) for
 | 
					and compilers. See the [quickstart](https://abseil.io/docs/cpp/quickstart) for
 | 
				
			||||||
more information on building Abseil using the Bazel build system.
 | 
					more information on building Abseil using the Bazel build system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -260,7 +260,7 @@
 | 
				
			||||||
//   Linux and Linux-derived           __linux__
 | 
					//   Linux and Linux-derived           __linux__
 | 
				
			||||||
//   Android                           __ANDROID__ (implies __linux__)
 | 
					//   Android                           __ANDROID__ (implies __linux__)
 | 
				
			||||||
//   Linux (non-Android)               __linux__ && !__ANDROID__
 | 
					//   Linux (non-Android)               __linux__ && !__ANDROID__
 | 
				
			||||||
//   Darwin (Mac OS X and iOS)         __APPLE__
 | 
					//   Darwin (macOS and iOS)            __APPLE__
 | 
				
			||||||
//   Akaros (http://akaros.org)        __ros__
 | 
					//   Akaros (http://akaros.org)        __ros__
 | 
				
			||||||
//   Windows                           _WIN32
 | 
					//   Windows                           _WIN32
 | 
				
			||||||
//   NaCL                              __native_client__
 | 
					//   NaCL                              __native_client__
 | 
				
			||||||
| 
						 | 
					@ -370,7 +370,7 @@
 | 
				
			||||||
#error "absl endian detection needs to be set up for your compiler"
 | 
					#error "absl endian detection needs to be set up for your compiler"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MacOS 10.13 and iOS 10.11 don't let you use <any>, <optional>, or <variant>
 | 
					// macOS 10.13 and iOS 10.11 don't let you use <any>, <optional>, or <variant>
 | 
				
			||||||
// even though the headers exist and are publicly noted to work.  See
 | 
					// even though the headers exist and are publicly noted to work.  See
 | 
				
			||||||
// https://github.com/abseil/abseil-cpp/issues/207 and
 | 
					// https://github.com/abseil/abseil-cpp/issues/207 and
 | 
				
			||||||
// https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes
 | 
					// https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@
 | 
				
			||||||
#ifdef _MSC_VER
 | 
					#ifdef _MSC_VER
 | 
				
			||||||
#include <stdlib.h>  // NOLINT(build/include)
 | 
					#include <stdlib.h>  // NOLINT(build/include)
 | 
				
			||||||
#elif defined(__APPLE__)
 | 
					#elif defined(__APPLE__)
 | 
				
			||||||
// Mac OS X / Darwin features
 | 
					// macOS / Darwin features
 | 
				
			||||||
#include <libkern/OSByteOrder.h>
 | 
					#include <libkern/OSByteOrder.h>
 | 
				
			||||||
#elif defined(__FreeBSD__)
 | 
					#elif defined(__FreeBSD__)
 | 
				
			||||||
#include <sys/endian.h>
 | 
					#include <sys/endian.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@
 | 
				
			||||||
#include <cstddef>
 | 
					#include <cstddef>
 | 
				
			||||||
#include <cstring>
 | 
					#include <cstring>
 | 
				
			||||||
#include <iterator>
 | 
					#include <iterator>
 | 
				
			||||||
 | 
					#include <limits>
 | 
				
			||||||
#include <memory>
 | 
					#include <memory>
 | 
				
			||||||
#include <utility>
 | 
					#include <utility>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -270,6 +271,19 @@ class Storage {
 | 
				
			||||||
  using ConstructionTransaction =
 | 
					  using ConstructionTransaction =
 | 
				
			||||||
      inlined_vector_internal::ConstructionTransaction<allocator_type>;
 | 
					      inlined_vector_internal::ConstructionTransaction<allocator_type>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static size_type NextCapacity(size_type current_capacity) {
 | 
				
			||||||
 | 
					    return current_capacity * 2;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static size_type ComputeCapacity(size_type current_capacity,
 | 
				
			||||||
 | 
					                                   size_type requested_capacity) {
 | 
				
			||||||
 | 
					    return (std::max)(NextCapacity(current_capacity), requested_capacity);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // Storage Constructors and Destructor
 | 
				
			||||||
 | 
					  // ---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Storage() : metadata_() {}
 | 
					  Storage() : metadata_() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  explicit Storage(const allocator_type& alloc)
 | 
					  explicit Storage(const allocator_type& alloc)
 | 
				
			||||||
| 
						 | 
					@ -281,10 +295,26 @@ class Storage {
 | 
				
			||||||
    DeallocateIfAllocated();
 | 
					    DeallocateIfAllocated();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // Storage Member Accessors
 | 
				
			||||||
 | 
					  // ---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  size_type& GetSizeAndIsAllocated() { return metadata_.template get<1>(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const size_type& GetSizeAndIsAllocated() const {
 | 
				
			||||||
 | 
					    return metadata_.template get<1>();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  size_type GetSize() const { return GetSizeAndIsAllocated() >> 1; }
 | 
					  size_type GetSize() const { return GetSizeAndIsAllocated() >> 1; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; }
 | 
					  bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pointer GetAllocatedData() { return data_.allocated.allocated_data; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const_pointer GetAllocatedData() const {
 | 
				
			||||||
 | 
					    return data_.allocated.allocated_data;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  pointer GetInlinedData() {
 | 
					  pointer GetInlinedData() {
 | 
				
			||||||
    return reinterpret_cast<pointer>(
 | 
					    return reinterpret_cast<pointer>(
 | 
				
			||||||
        std::addressof(data_.inlined.inlined_data[0]));
 | 
					        std::addressof(data_.inlined.inlined_data[0]));
 | 
				
			||||||
| 
						 | 
					@ -295,18 +325,12 @@ class Storage {
 | 
				
			||||||
        std::addressof(data_.inlined.inlined_data[0]));
 | 
					        std::addressof(data_.inlined.inlined_data[0]));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  pointer GetAllocatedData() { return data_.allocated.allocated_data; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const_pointer GetAllocatedData() const {
 | 
					 | 
				
			||||||
    return data_.allocated.allocated_data;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  size_type GetInlinedCapacity() const { return static_cast<size_type>(N); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  size_type GetAllocatedCapacity() const {
 | 
					  size_type GetAllocatedCapacity() const {
 | 
				
			||||||
    return data_.allocated.allocated_capacity;
 | 
					    return data_.allocated.allocated_capacity;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  size_type GetInlinedCapacity() const { return static_cast<size_type>(N); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  StorageView MakeStorageView() {
 | 
					  StorageView MakeStorageView() {
 | 
				
			||||||
    return GetIsAllocated()
 | 
					    return GetIsAllocated()
 | 
				
			||||||
               ? StorageView{GetAllocatedData(), GetSize(),
 | 
					               ? StorageView{GetAllocatedData(), GetSize(),
 | 
				
			||||||
| 
						 | 
					@ -322,57 +346,9 @@ class Storage {
 | 
				
			||||||
    return std::addressof(metadata_.template get<0>());
 | 
					    return std::addressof(metadata_.template get<0>());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void SetIsAllocated() { GetSizeAndIsAllocated() |= 1; }
 | 
					  // ---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					  // Storage Member Mutators
 | 
				
			||||||
  void UnsetIsAllocated() {
 | 
					  // ---------------------------------------------------------------------------
 | 
				
			||||||
    SetIsAllocated();
 | 
					 | 
				
			||||||
    GetSizeAndIsAllocated() -= 1;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void SetAllocatedSize(size_type size) {
 | 
					 | 
				
			||||||
    GetSizeAndIsAllocated() = (size << 1) | static_cast<size_type>(1);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void SetInlinedSize(size_type size) { GetSizeAndIsAllocated() = size << 1; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void SetSize(size_type size) {
 | 
					 | 
				
			||||||
    GetSizeAndIsAllocated() =
 | 
					 | 
				
			||||||
        (size << 1) | static_cast<size_type>(GetIsAllocated());
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void AddSize(size_type count) { GetSizeAndIsAllocated() += count << 1; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void SubtractSize(size_type count) {
 | 
					 | 
				
			||||||
    assert(count <= GetSize());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    GetSizeAndIsAllocated() -= count << 1;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void SetAllocatedData(pointer data, size_type capacity) {
 | 
					 | 
				
			||||||
    data_.allocated.allocated_data = data;
 | 
					 | 
				
			||||||
    data_.allocated.allocated_capacity = capacity;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void DeallocateIfAllocated() {
 | 
					 | 
				
			||||||
    if (GetIsAllocated()) {
 | 
					 | 
				
			||||||
      AllocatorTraits::deallocate(*GetAllocPtr(), GetAllocatedData(),
 | 
					 | 
				
			||||||
                                  GetAllocatedCapacity());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void AcquireAllocation(AllocationTransaction* allocation_tx_ptr) {
 | 
					 | 
				
			||||||
    SetAllocatedData(allocation_tx_ptr->GetData(),
 | 
					 | 
				
			||||||
                     allocation_tx_ptr->GetCapacity());
 | 
					 | 
				
			||||||
    allocation_tx_ptr->GetData() = nullptr;
 | 
					 | 
				
			||||||
    allocation_tx_ptr->GetCapacity() = 0;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void MemcpyFrom(const Storage& other_storage) {
 | 
					 | 
				
			||||||
    assert(IsMemcpyOk::value || other_storage.GetIsAllocated());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    GetSizeAndIsAllocated() = other_storage.GetSizeAndIsAllocated();
 | 
					 | 
				
			||||||
    data_ = other_storage.data_;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  template <typename ValueAdapter>
 | 
					  template <typename ValueAdapter>
 | 
				
			||||||
  void Initialize(ValueAdapter values, size_type new_size);
 | 
					  void Initialize(ValueAdapter values, size_type new_size);
 | 
				
			||||||
| 
						 | 
					@ -398,22 +374,64 @@ class Storage {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void Swap(Storage* other_storage_ptr);
 | 
					  void Swap(Storage* other_storage_ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void SetIsAllocated() {
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() |= static_cast<size_type>(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void UnsetIsAllocated() {
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() &= ((std::numeric_limits<size_type>::max)() - 1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void SetSize(size_type size) {
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() =
 | 
				
			||||||
 | 
					        (size << 1) | static_cast<size_type>(GetIsAllocated());
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void SetAllocatedSize(size_type size) {
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() = (size << 1) | static_cast<size_type>(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void SetInlinedSize(size_type size) {
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() = size << static_cast<size_type>(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void AddSize(size_type count) {
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() += count << static_cast<size_type>(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void SubtractSize(size_type count) {
 | 
				
			||||||
 | 
					    assert(count <= GetSize());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() -= count << static_cast<size_type>(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void SetAllocatedData(pointer data, size_type capacity) {
 | 
				
			||||||
 | 
					    data_.allocated.allocated_data = data;
 | 
				
			||||||
 | 
					    data_.allocated.allocated_capacity = capacity;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void AcquireAllocatedData(AllocationTransaction* allocation_tx_ptr) {
 | 
				
			||||||
 | 
					    SetAllocatedData(allocation_tx_ptr->GetData(),
 | 
				
			||||||
 | 
					                     allocation_tx_ptr->GetCapacity());
 | 
				
			||||||
 | 
					    allocation_tx_ptr->GetData() = nullptr;
 | 
				
			||||||
 | 
					    allocation_tx_ptr->GetCapacity() = 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void MemcpyFrom(const Storage& other_storage) {
 | 
				
			||||||
 | 
					    assert(IsMemcpyOk::value || other_storage.GetIsAllocated());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GetSizeAndIsAllocated() = other_storage.GetSizeAndIsAllocated();
 | 
				
			||||||
 | 
					    data_ = other_storage.data_;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void DeallocateIfAllocated() {
 | 
				
			||||||
 | 
					    if (GetIsAllocated()) {
 | 
				
			||||||
 | 
					      AllocatorTraits::deallocate(*GetAllocPtr(), GetAllocatedData(),
 | 
				
			||||||
 | 
					                                  GetAllocatedCapacity());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 private:
 | 
					 private:
 | 
				
			||||||
  size_type& GetSizeAndIsAllocated() { return metadata_.template get<1>(); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const size_type& GetSizeAndIsAllocated() const {
 | 
					 | 
				
			||||||
    return metadata_.template get<1>();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  static size_type NextCapacity(size_type current_capacity) {
 | 
					 | 
				
			||||||
    return current_capacity * 2;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  static size_type ComputeCapacity(size_type current_capacity,
 | 
					 | 
				
			||||||
                                   size_type requested_capacity) {
 | 
					 | 
				
			||||||
    return (std::max)(NextCapacity(current_capacity), requested_capacity);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  using Metadata =
 | 
					  using Metadata =
 | 
				
			||||||
      container_internal::CompressedTuple<allocator_type, size_type>;
 | 
					      container_internal::CompressedTuple<allocator_type, size_type>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -508,7 +526,7 @@ auto Storage<T, N, A>::Assign(ValueAdapter values, size_type new_size) -> void {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (allocation_tx.DidAllocate()) {
 | 
					  if (allocation_tx.DidAllocate()) {
 | 
				
			||||||
    DeallocateIfAllocated();
 | 
					    DeallocateIfAllocated();
 | 
				
			||||||
    AcquireAllocation(&allocation_tx);
 | 
					    AcquireAllocatedData(&allocation_tx);
 | 
				
			||||||
    SetIsAllocated();
 | 
					    SetIsAllocated();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -557,7 +575,7 @@ auto Storage<T, N, A>::Resize(ValueAdapter values, size_type new_size) -> void {
 | 
				
			||||||
  construction_tx.Commit();
 | 
					  construction_tx.Commit();
 | 
				
			||||||
  if (allocation_tx.DidAllocate()) {
 | 
					  if (allocation_tx.DidAllocate()) {
 | 
				
			||||||
    DeallocateIfAllocated();
 | 
					    DeallocateIfAllocated();
 | 
				
			||||||
    AcquireAllocation(&allocation_tx);
 | 
					    AcquireAllocatedData(&allocation_tx);
 | 
				
			||||||
    SetIsAllocated();
 | 
					    SetIsAllocated();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -600,7 +618,7 @@ auto Storage<T, N, A>::Insert(const_iterator pos, ValueAdapter values,
 | 
				
			||||||
    construction_tx.Commit();
 | 
					    construction_tx.Commit();
 | 
				
			||||||
    move_construciton_tx.Commit();
 | 
					    move_construciton_tx.Commit();
 | 
				
			||||||
    DeallocateIfAllocated();
 | 
					    DeallocateIfAllocated();
 | 
				
			||||||
    AcquireAllocation(&allocation_tx);
 | 
					    AcquireAllocatedData(&allocation_tx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SetAllocatedSize(new_size);
 | 
					    SetAllocatedSize(new_size);
 | 
				
			||||||
    return iterator(new_data + insert_index);
 | 
					    return iterator(new_data + insert_index);
 | 
				
			||||||
| 
						 | 
					@ -697,7 +715,7 @@ auto Storage<T, N, A>::EmplaceBack(Args&&... args) -> reference {
 | 
				
			||||||
                                             storage_view.size);
 | 
					                                             storage_view.size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DeallocateIfAllocated();
 | 
					    DeallocateIfAllocated();
 | 
				
			||||||
    AcquireAllocation(&allocation_tx);
 | 
					    AcquireAllocatedData(&allocation_tx);
 | 
				
			||||||
    SetIsAllocated();
 | 
					    SetIsAllocated();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -754,7 +772,7 @@ auto Storage<T, N, A>::Reserve(size_type requested_capacity) -> void {
 | 
				
			||||||
                                           storage_view.size);
 | 
					                                           storage_view.size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DeallocateIfAllocated();
 | 
					  DeallocateIfAllocated();
 | 
				
			||||||
  AcquireAllocation(&allocation_tx);
 | 
					  AcquireAllocatedData(&allocation_tx);
 | 
				
			||||||
  SetIsAllocated();
 | 
					  SetIsAllocated();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -800,7 +818,7 @@ auto Storage<T, N, A>::ShrinkToFit() -> void {
 | 
				
			||||||
                              storage_view.capacity);
 | 
					                              storage_view.capacity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (allocation_tx.DidAllocate()) {
 | 
					  if (allocation_tx.DidAllocate()) {
 | 
				
			||||||
    AcquireAllocation(&allocation_tx);
 | 
					    AcquireAllocatedData(&allocation_tx);
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    UnsetIsAllocated();
 | 
					    UnsetIsAllocated();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -162,7 +162,7 @@ ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY   // May read random elements from stack.
 | 
				
			||||||
static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
 | 
					static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
 | 
				
			||||||
                      const void *ucp, int *min_dropped_frames) {
 | 
					                      const void *ucp, int *min_dropped_frames) {
 | 
				
			||||||
  void **sp;
 | 
					  void **sp;
 | 
				
			||||||
  // Apple OS X uses an old version of gnu as -- both Darwin 7.9.0 (Panther)
 | 
					  // Apple macOS uses an old version of gnu as -- both Darwin 7.9.0 (Panther)
 | 
				
			||||||
  // and Darwin 8.8.1 (Tiger) use as 1.38.  This means we have to use a
 | 
					  // and Darwin 8.8.1 (Tiger) use as 1.38.  This means we have to use a
 | 
				
			||||||
  // different asm syntax.  I don't know quite the best way to discriminate
 | 
					  // different asm syntax.  I don't know quite the best way to discriminate
 | 
				
			||||||
  // systems using the old as from the new one; I've gone with __APPLE__.
 | 
					  // systems using the old as from the new one; I've gone with __APPLE__.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -110,8 +110,12 @@ void TableGenerator::Print(std::ostream* os) {
 | 
				
			||||||
         "\n"
 | 
					         "\n"
 | 
				
			||||||
         "#include \"absl/random/gaussian_distribution.h\"\n"
 | 
					         "#include \"absl/random/gaussian_distribution.h\"\n"
 | 
				
			||||||
         "\n"
 | 
					         "\n"
 | 
				
			||||||
         "namespace absl {\n"
 | 
					         // "namespace " and "absl" are broken apart so as not to conflict with
 | 
				
			||||||
         "namespace random_internal {\n"
 | 
					         // script that adds the LTS inline namespace.
 | 
				
			||||||
 | 
					         "namespace "
 | 
				
			||||||
 | 
					         "absl {\n"
 | 
				
			||||||
 | 
					         "namespace "
 | 
				
			||||||
 | 
					         "random_internal {\n"
 | 
				
			||||||
         "\n"
 | 
					         "\n"
 | 
				
			||||||
         "const gaussian_distribution_base::Tables\n"
 | 
					         "const gaussian_distribution_base::Tables\n"
 | 
				
			||||||
         "    gaussian_distribution_base::zg_ = {\n";
 | 
					         "    gaussian_distribution_base::zg_ = {\n";
 | 
				
			||||||
| 
						 | 
					@ -120,8 +124,10 @@ void TableGenerator::Print(std::ostream* os) {
 | 
				
			||||||
  FormatArrayContents(os, tables_.f);
 | 
					  FormatArrayContents(os, tables_.f);
 | 
				
			||||||
  *os << "};\n"
 | 
					  *os << "};\n"
 | 
				
			||||||
         "\n"
 | 
					         "\n"
 | 
				
			||||||
         "}  // namespace random_internal\n"
 | 
					         "}  // namespace "
 | 
				
			||||||
         "}  // namespace absl\n"
 | 
					         "random_internal\n"
 | 
				
			||||||
 | 
					         "}  // namespace "
 | 
				
			||||||
 | 
					         "absl\n"
 | 
				
			||||||
         "\n"
 | 
					         "\n"
 | 
				
			||||||
         "// clang-format on\n"
 | 
					         "// clang-format on\n"
 | 
				
			||||||
         "// END GENERATED CODE";
 | 
					         "// END GENERATED CODE";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@
 | 
				
			||||||
//   Linux and Linux-derived           __linux__
 | 
					//   Linux and Linux-derived           __linux__
 | 
				
			||||||
//   Android                           __ANDROID__ (implies __linux__)
 | 
					//   Android                           __ANDROID__ (implies __linux__)
 | 
				
			||||||
//   Linux (non-Android)               __linux__ && !__ANDROID__
 | 
					//   Linux (non-Android)               __linux__ && !__ANDROID__
 | 
				
			||||||
//   Darwin (Mac OS X and iOS)         __APPLE__
 | 
					//   Darwin (macOS and iOS)            __APPLE__
 | 
				
			||||||
//   Akaros (http://akaros.org)        __ros__
 | 
					//   Akaros (http://akaros.org)        __ros__
 | 
				
			||||||
//   Windows                           _WIN32
 | 
					//   Windows                           _WIN32
 | 
				
			||||||
//   NaCL                              __native_client__
 | 
					//   NaCL                              __native_client__
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -713,7 +713,7 @@ TEST(stringtest, safe_strtou64_base_length_delimited) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// feenableexcept() and fedisableexcept() are missing on Mac OS X, MSVC,
 | 
					// feenableexcept() and fedisableexcept() are missing on macOS, MSVC,
 | 
				
			||||||
// and WebAssembly.
 | 
					// and WebAssembly.
 | 
				
			||||||
#if defined(_MSC_VER) || defined(__APPLE__) || defined(__EMSCRIPTEN__)
 | 
					#if defined(_MSC_VER) || defined(__APPLE__) || defined(__EMSCRIPTEN__)
 | 
				
			||||||
#define ABSL_MISSING_FEENABLEEXCEPT 1
 | 
					#define ABSL_MISSING_FEENABLEEXCEPT 1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -201,7 +201,7 @@ TEST(ParseTime, ErrorCases) {
 | 
				
			||||||
  err.clear();
 | 
					  err.clear();
 | 
				
			||||||
  EXPECT_FALSE(absl::ParseTime("%Q", "x", &t, &err)) << err;
 | 
					  EXPECT_FALSE(absl::ParseTime("%Q", "x", &t, &err)) << err;
 | 
				
			||||||
  // Exact contents of "err" are platform-dependent because of
 | 
					  // Exact contents of "err" are platform-dependent because of
 | 
				
			||||||
  // differences in the strptime implementation between OSX and Linux.
 | 
					  // differences in the strptime implementation between macOS and Linux.
 | 
				
			||||||
  EXPECT_FALSE(err.empty());
 | 
					  EXPECT_FALSE(err.empty());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Fails because of trailing, unparsed data "blah".
 | 
					  // Fails because of trailing, unparsed data "blah".
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								ci/macos_xcode_bazel.sh
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										2
									
								
								ci/macos_xcode_bazel.sh
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
# See the License for the specific language governing permissions and
 | 
					# See the License for the specific language governing permissions and
 | 
				
			||||||
# limitations under the License.
 | 
					# limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This script is invoked on Kokoro to test Abseil on MacOS.
 | 
					# This script is invoked on Kokoro to test Abseil on macOS.
 | 
				
			||||||
# It is not hermetic and may break when Kokoro is updated.
 | 
					# It is not hermetic and may break when Kokoro is updated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set -euox pipefail
 | 
					set -euox pipefail
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								ci/macos_xcode_cmake.sh
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										2
									
								
								ci/macos_xcode_cmake.sh
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
# See the License for the specific language governing permissions and
 | 
					# See the License for the specific language governing permissions and
 | 
				
			||||||
# limitations under the License.
 | 
					# limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This script is invoked on Kokoro to test Abseil on MacOS.
 | 
					# This script is invoked on Kokoro to test Abseil on macOS.
 | 
				
			||||||
# It is not hermetic and may break when Kokoro is updated.
 | 
					# It is not hermetic and may break when Kokoro is updated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set -euox pipefail
 | 
					set -euox pipefail
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue