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