From 9ee91d3e430fb33a4590486573792eb0fa146c2d Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Thu, 8 Aug 2019 10:56:58 -0700 Subject: [PATCH] Export of internal Abseil changes -- f51743aa96e19aa3dda96d09d313b4390f1d61e7 by CJ Johnson : Minor touchup on the InlinedVector/Storage internal header file PiperOrigin-RevId: 262389640 -- e2f54c1f7142e40d30ff0fda43bef050625821a5 by Abseil Team : Update the absl codebase to use proper marketing names for macOS and Xcode PiperOrigin-RevId: 262389450 -- f29aae774edd0d00e2daa1fb96694a6dc3565a55 by CJ Johnson : Blocks code generator script from being affected by LTS inline namespaces PiperOrigin-RevId: 262376791 GitOrigin-RevId: f51743aa96e19aa3dda96d09d313b4390f1d61e7 Change-Id: I33be7f5a708ce8a2b7111b00151e43d73c5e0009 --- README.md | 2 +- absl/base/config.h | 4 +- absl/base/internal/endian.h | 2 +- absl/container/internal/inlined_vector.h | 178 ++++++++++-------- .../internal/stacktrace_powerpc-inl.inc | 2 +- .../gaussian_distribution_gentables.cc | 14 +- absl/random/internal/platform.h | 2 +- absl/strings/numbers_test.cc | 2 +- absl/time/format_test.cc | 2 +- ci/macos_xcode_bazel.sh | 2 +- ci/macos_xcode_cmake.sh | 2 +- 11 files changed, 118 insertions(+), 94 deletions(-) mode change 100644 => 100755 ci/macos_xcode_bazel.sh mode change 100644 => 100755 ci/macos_xcode_cmake.sh diff --git a/README.md b/README.md index 2c513ea60..85de56965 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ the Abseil code, running tests, and getting a simple binary working. ## Building 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 more information on building Abseil using the Bazel build system. diff --git a/absl/base/config.h b/absl/base/config.h index 181d840e1..1c3cb08e7 100644 --- a/absl/base/config.h +++ b/absl/base/config.h @@ -260,7 +260,7 @@ // Linux and Linux-derived __linux__ // Android __ANDROID__ (implies __linux__) // Linux (non-Android) __linux__ && !__ANDROID__ -// Darwin (Mac OS X and iOS) __APPLE__ +// Darwin (macOS and iOS) __APPLE__ // Akaros (http://akaros.org) __ros__ // Windows _WIN32 // NaCL __native_client__ @@ -370,7 +370,7 @@ #error "absl endian detection needs to be set up for your compiler" #endif -// MacOS 10.13 and iOS 10.11 don't let you use , , or +// macOS 10.13 and iOS 10.11 don't let you use , , or // even though the headers exist and are publicly noted to work. See // https://github.com/abseil/abseil-cpp/issues/207 and // https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes diff --git a/absl/base/internal/endian.h b/absl/base/internal/endian.h index 6b828b6e6..296e92d9e 100644 --- a/absl/base/internal/endian.h +++ b/absl/base/internal/endian.h @@ -20,7 +20,7 @@ #ifdef _MSC_VER #include // NOLINT(build/include) #elif defined(__APPLE__) -// Mac OS X / Darwin features +// macOS / Darwin features #include #elif defined(__FreeBSD__) #include diff --git a/absl/container/internal/inlined_vector.h b/absl/container/internal/inlined_vector.h index 17e203e51..61c4f6ebf 100644 --- a/absl/container/internal/inlined_vector.h +++ b/absl/container/internal/inlined_vector.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -270,6 +271,19 @@ class Storage { using ConstructionTransaction = inlined_vector_internal::ConstructionTransaction; + 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_() {} explicit Storage(const allocator_type& alloc) @@ -281,10 +295,26 @@ class Storage { 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; } bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; } + pointer GetAllocatedData() { return data_.allocated.allocated_data; } + + const_pointer GetAllocatedData() const { + return data_.allocated.allocated_data; + } + pointer GetInlinedData() { return reinterpret_cast( std::addressof(data_.inlined.inlined_data[0])); @@ -295,18 +325,12 @@ class Storage { 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(N); } - size_type GetAllocatedCapacity() const { return data_.allocated.allocated_capacity; } + size_type GetInlinedCapacity() const { return static_cast(N); } + StorageView MakeStorageView() { return GetIsAllocated() ? StorageView{GetAllocatedData(), GetSize(), @@ -322,57 +346,9 @@ class Storage { return std::addressof(metadata_.template get<0>()); } - void SetIsAllocated() { GetSizeAndIsAllocated() |= 1; } - - void UnsetIsAllocated() { - SetIsAllocated(); - GetSizeAndIsAllocated() -= 1; - } - - void SetAllocatedSize(size_type size) { - GetSizeAndIsAllocated() = (size << 1) | static_cast(1); - } - - void SetInlinedSize(size_type size) { GetSizeAndIsAllocated() = size << 1; } - - void SetSize(size_type size) { - GetSizeAndIsAllocated() = - (size << 1) | static_cast(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_; - } + // --------------------------------------------------------------------------- + // Storage Member Mutators + // --------------------------------------------------------------------------- template void Initialize(ValueAdapter values, size_type new_size); @@ -398,22 +374,64 @@ class Storage { void Swap(Storage* other_storage_ptr); + void SetIsAllocated() { + GetSizeAndIsAllocated() |= static_cast(1); + } + + void UnsetIsAllocated() { + GetSizeAndIsAllocated() &= ((std::numeric_limits::max)() - 1); + } + + void SetSize(size_type size) { + GetSizeAndIsAllocated() = + (size << 1) | static_cast(GetIsAllocated()); + } + + void SetAllocatedSize(size_type size) { + GetSizeAndIsAllocated() = (size << 1) | static_cast(1); + } + + void SetInlinedSize(size_type size) { + GetSizeAndIsAllocated() = size << static_cast(1); + } + + void AddSize(size_type count) { + GetSizeAndIsAllocated() += count << static_cast(1); + } + + void SubtractSize(size_type count) { + assert(count <= GetSize()); + + GetSizeAndIsAllocated() -= count << static_cast(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: - 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 = container_internal::CompressedTuple; @@ -508,7 +526,7 @@ auto Storage::Assign(ValueAdapter values, size_type new_size) -> void { if (allocation_tx.DidAllocate()) { DeallocateIfAllocated(); - AcquireAllocation(&allocation_tx); + AcquireAllocatedData(&allocation_tx); SetIsAllocated(); } @@ -557,7 +575,7 @@ auto Storage::Resize(ValueAdapter values, size_type new_size) -> void { construction_tx.Commit(); if (allocation_tx.DidAllocate()) { DeallocateIfAllocated(); - AcquireAllocation(&allocation_tx); + AcquireAllocatedData(&allocation_tx); SetIsAllocated(); } @@ -600,7 +618,7 @@ auto Storage::Insert(const_iterator pos, ValueAdapter values, construction_tx.Commit(); move_construciton_tx.Commit(); DeallocateIfAllocated(); - AcquireAllocation(&allocation_tx); + AcquireAllocatedData(&allocation_tx); SetAllocatedSize(new_size); return iterator(new_data + insert_index); @@ -697,7 +715,7 @@ auto Storage::EmplaceBack(Args&&... args) -> reference { storage_view.size); DeallocateIfAllocated(); - AcquireAllocation(&allocation_tx); + AcquireAllocatedData(&allocation_tx); SetIsAllocated(); } @@ -754,7 +772,7 @@ auto Storage::Reserve(size_type requested_capacity) -> void { storage_view.size); DeallocateIfAllocated(); - AcquireAllocation(&allocation_tx); + AcquireAllocatedData(&allocation_tx); SetIsAllocated(); } @@ -800,7 +818,7 @@ auto Storage::ShrinkToFit() -> void { storage_view.capacity); if (allocation_tx.DidAllocate()) { - AcquireAllocation(&allocation_tx); + AcquireAllocatedData(&allocation_tx); } else { UnsetIsAllocated(); } diff --git a/absl/debugging/internal/stacktrace_powerpc-inl.inc b/absl/debugging/internal/stacktrace_powerpc-inl.inc index 9e0f2aad3..3a070ee45 100644 --- a/absl/debugging/internal/stacktrace_powerpc-inl.inc +++ b/absl/debugging/internal/stacktrace_powerpc-inl.inc @@ -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, const void *ucp, int *min_dropped_frames) { 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 // 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__. diff --git a/absl/random/internal/gaussian_distribution_gentables.cc b/absl/random/internal/gaussian_distribution_gentables.cc index 85247966f..16a23cb2f 100644 --- a/absl/random/internal/gaussian_distribution_gentables.cc +++ b/absl/random/internal/gaussian_distribution_gentables.cc @@ -110,8 +110,12 @@ void TableGenerator::Print(std::ostream* os) { "\n" "#include \"absl/random/gaussian_distribution.h\"\n" "\n" - "namespace absl {\n" - "namespace random_internal {\n" + // "namespace " and "absl" are broken apart so as not to conflict with + // script that adds the LTS inline namespace. + "namespace " + "absl {\n" + "namespace " + "random_internal {\n" "\n" "const gaussian_distribution_base::Tables\n" " gaussian_distribution_base::zg_ = {\n"; @@ -120,8 +124,10 @@ void TableGenerator::Print(std::ostream* os) { FormatArrayContents(os, tables_.f); *os << "};\n" "\n" - "} // namespace random_internal\n" - "} // namespace absl\n" + "} // namespace " + "random_internal\n" + "} // namespace " + "absl\n" "\n" "// clang-format on\n" "// END GENERATED CODE"; diff --git a/absl/random/internal/platform.h b/absl/random/internal/platform.h index d1ef5c249..a5a42cbb8 100644 --- a/absl/random/internal/platform.h +++ b/absl/random/internal/platform.h @@ -30,7 +30,7 @@ // Linux and Linux-derived __linux__ // Android __ANDROID__ (implies __linux__) // Linux (non-Android) __linux__ && !__ANDROID__ -// Darwin (Mac OS X and iOS) __APPLE__ +// Darwin (macOS and iOS) __APPLE__ // Akaros (http://akaros.org) __ros__ // Windows _WIN32 // NaCL __native_client__ diff --git a/absl/strings/numbers_test.cc b/absl/strings/numbers_test.cc index ca2ee485d..77d7e7835 100644 --- a/absl/strings/numbers_test.cc +++ b/absl/strings/numbers_test.cc @@ -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. #if defined(_MSC_VER) || defined(__APPLE__) || defined(__EMSCRIPTEN__) #define ABSL_MISSING_FEENABLEEXCEPT 1 diff --git a/absl/time/format_test.cc b/absl/time/format_test.cc index 4a1f1aa2c..ab1f30594 100644 --- a/absl/time/format_test.cc +++ b/absl/time/format_test.cc @@ -201,7 +201,7 @@ TEST(ParseTime, ErrorCases) { err.clear(); EXPECT_FALSE(absl::ParseTime("%Q", "x", &t, &err)) << err; // 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()); // Fails because of trailing, unparsed data "blah". diff --git a/ci/macos_xcode_bazel.sh b/ci/macos_xcode_bazel.sh old mode 100644 new mode 100755 index e840e9d06..f0f142801 --- a/ci/macos_xcode_bazel.sh +++ b/ci/macos_xcode_bazel.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # 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. set -euox pipefail diff --git a/ci/macos_xcode_cmake.sh b/ci/macos_xcode_cmake.sh old mode 100644 new mode 100755 index 4892e26ed..75b0f2d19 --- a/ci/macos_xcode_cmake.sh +++ b/ci/macos_xcode_cmake.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # 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. set -euox pipefail