From b16aeb6756bdab08cdf12d40baab5b51f7d15b16 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Mon, 7 Jan 2019 09:01:16 -0800 Subject: [PATCH] Export of internal Abseil changes. -- 5f1cf6547231f1b1daad6d1b785df6b0b999b3c9 by Samuel Benzaquen : Fix uninitialized member in the `iterator` class by using a union of the two possible states of the iterator. This silences a Wuninitialized warning in gcc>=7. PiperOrigin-RevId: 228175148 -- 98b4e3204c0ec3cfd4cb037e24d443ea4b63fc84 by CJ Johnson : Factors out the implementation of InlinedVector::swap(...) into a private member function PiperOrigin-RevId: 228173383 -- f1432ad3a8b05285c6d55bc4754cfae765485b7f by Abseil Team : Import of CCTZ from GitHub. PiperOrigin-RevId: 227891984 -- 03fc00c7a4efc6000e6d9125cb2e252bffda76fe by Andy Getzendanner : Add a missing linebreak to a comment and markdownify two unordered lists. PiperOrigin-RevId: 227861389 -- 0d66c9afba4fc9aa52e61d9fb410e165018a7b48 by Abseil Team : Add an API to register a new source for the cycle clock. PiperOrigin-RevId: 227779218 -- 14d3f9b70c8818b8541e5fb2f6ca4c59d479de31 by Andy Getzendanner : Correct a typo in a stripping marker. PiperOrigin-RevId: 227750014 -- 59df88740f4e315beb57a8772f8bcf7879440c74 by Matt Kulukundis : Switch thread local handling to be more cross platform PiperOrigin-RevId: 227695133 -- 75deed5bfcb5c42534e933f104aa7d94e11e348d by Abseil Team : Rollback workaround toolchain bug for incorrect handling of thread_local in inline functions PiperOrigin-RevId: 227689133 -- 54994bf0afec026e6e0e7a199df0bbb4b7d9a4aa by Derek Mauro : Add -pthread to linkopts where it actually belongs, on the library that uses it. Fixes https://github.com/abseil/abseil-cpp/issues/240. PiperOrigin-RevId: 227612492 -- 893875f3536b7e0a1bad993aa6b2e083abb3b25a by Derek Mauro : Internal change PiperOrigin-RevId: 227582833 -- 506c9b8e9002ca3389c7040473b68d4cbf94bdcc by Matt Kulukundis : Workaround toolchain bug for incorrect handling of thread_local in inline functions PiperOrigin-RevId: 227561449 -- 29ee90d96dfe3114cf93f9bb92ea0cc9e768a407 by Derek Mauro : Internal change PiperOrigin-RevId: 227054634 GitOrigin-RevId: 5f1cf6547231f1b1daad6d1b785df6b0b999b3c9 Change-Id: Ibc90566d92ee6e0ad7e150f513ec7f5d22ec0a94 --- absl/UPGRADES.md => UPGRADES.md | 0 absl/base/BUILD.bazel | 16 +- absl/base/internal/cycleclock.cc | 12 +- absl/base/internal/cycleclock.h | 14 ++ absl/base/internal/per_thread_tls.h | 12 +- absl/container/BUILD.bazel | 11 ++ absl/container/CMakeLists.txt | 11 ++ absl/container/inlined_vector.h | 151 +++++++++--------- absl/container/inlined_vector_test.cc | 53 +----- absl/container/internal/counting_allocator.h | 79 +++++++++ absl/container/internal/hashtablez_sampler.cc | 4 + absl/container/internal/hashtablez_sampler.h | 11 +- absl/container/internal/raw_hash_set.h | 6 +- absl/copts/copts.py | 2 - absl/synchronization/BUILD.bazel | 8 +- absl/time/internal/cctz/BUILD.bazel | 2 +- .../cctz/src/time_zone_format_test.cc | 17 +- .../cctz/src/time_zone_lookup_test.cc | 2 + absl/time/internal/cctz/testdata/version | 2 +- .../cctz/testdata/zoneinfo/Africa/Sao_Tome | Bin 225 -> 254 bytes .../cctz/testdata/zoneinfo/America/Metlakatla | Bin 1409 -> 1409 bytes .../cctz/testdata/zoneinfo/Asia/Hong_Kong | Bin 1175 -> 1191 bytes .../cctz/testdata/zoneinfo/Asia/Qostanay | Bin 0 -> 1033 bytes .../cctz/testdata/zoneinfo/Asia/Qyzylorda | Bin 1017 -> 1047 bytes .../cctz/testdata/zoneinfo/Asia/Tehran | Bin 1704 -> 2610 bytes .../internal/cctz/testdata/zoneinfo/Hongkong | Bin 1175 -> 1191 bytes .../time/internal/cctz/testdata/zoneinfo/Iran | Bin 1704 -> 2610 bytes .../internal/cctz/testdata/zoneinfo/Kwajalein | Bin 250 -> 340 bytes .../cctz/testdata/zoneinfo/Pacific/Chuuk | Bin 174 -> 287 bytes .../cctz/testdata/zoneinfo/Pacific/Guam | Bin 216 -> 516 bytes .../cctz/testdata/zoneinfo/Pacific/Kosrae | Bin 242 -> 377 bytes .../cctz/testdata/zoneinfo/Pacific/Kwajalein | Bin 250 -> 340 bytes .../cctz/testdata/zoneinfo/Pacific/Majuro | Bin 212 -> 330 bytes .../cctz/testdata/zoneinfo/Pacific/Nauru | Bin 268 -> 268 bytes .../cctz/testdata/zoneinfo/Pacific/Palau | Bin 173 -> 190 bytes .../cctz/testdata/zoneinfo/Pacific/Pohnpei | Bin 174 -> 325 bytes .../cctz/testdata/zoneinfo/Pacific/Ponape | Bin 174 -> 325 bytes .../cctz/testdata/zoneinfo/Pacific/Saipan | Bin 216 -> 516 bytes .../cctz/testdata/zoneinfo/Pacific/Truk | Bin 174 -> 287 bytes .../cctz/testdata/zoneinfo/Pacific/Yap | Bin 174 -> 287 bytes .../cctz/testdata/zoneinfo/zone1970.tab | 1 + 41 files changed, 253 insertions(+), 161 deletions(-) rename absl/UPGRADES.md => UPGRADES.md (100%) create mode 100644 absl/container/internal/counting_allocator.h create mode 100644 absl/time/internal/cctz/testdata/zoneinfo/Asia/Qostanay diff --git a/absl/UPGRADES.md b/UPGRADES.md similarity index 100% rename from absl/UPGRADES.md rename to UPGRADES.md diff --git a/absl/base/BUILD.bazel b/absl/base/BUILD.bazel index 2717df0c9..49ae1824f 100644 --- a/absl/base/BUILD.bazel +++ b/absl/base/BUILD.bazel @@ -89,6 +89,10 @@ cc_library( "internal/low_level_alloc.h", ], copts = ABSL_DEFAULT_COPTS, + linkopts = select({ + "//absl:windows": [], + "//conditions:default": ["-pthread"], + }), visibility = [ "//absl:__subpackages__", ], @@ -142,6 +146,10 @@ cc_library( "log_severity.h", ], copts = ABSL_DEFAULT_COPTS, + linkopts = select({ + "//absl:windows": [], + "//conditions:default": ["-pthread"], + }), deps = [ ":base_internal", ":config", @@ -423,10 +431,6 @@ cc_test( size = "small", srcs = ["internal/low_level_alloc_test.cc"], copts = ABSL_TEST_COPTS, - linkopts = select({ - "//absl:windows": [], - "//conditions:default": ["-pthread"], - }), tags = ["no_test_ios_x86_64"], deps = [":malloc_internal"], ) @@ -436,10 +440,6 @@ cc_test( size = "small", srcs = ["internal/thread_identity_test.cc"], copts = ABSL_TEST_COPTS, - linkopts = select({ - "//absl:windows": [], - "//conditions:default": ["-pthread"], - }), tags = [ "no_test_wasm", ], diff --git a/absl/base/internal/cycleclock.cc b/absl/base/internal/cycleclock.cc index a742df01f..9eb13b8cb 100644 --- a/absl/base/internal/cycleclock.cc +++ b/absl/base/internal/cycleclock.cc @@ -22,6 +22,7 @@ #include "absl/base/internal/cycleclock.h" +#include #include // NOLINT(build/c++11) #include "absl/base/internal/unscaledcycleclock.h" @@ -52,17 +53,26 @@ static constexpr int32_t kShift = 2; #endif static constexpr double kFrequencyScale = 1.0 / (1 << kShift); +static std::atomic cycle_clock_source; } // namespace int64_t CycleClock::Now() { - return base_internal::UnscaledCycleClock::Now() >> kShift; + auto fn = cycle_clock_source.load(std::memory_order_relaxed); + if (fn == nullptr) { + return base_internal::UnscaledCycleClock::Now() >> kShift; + } + return fn() >> kShift; } double CycleClock::Frequency() { return kFrequencyScale * base_internal::UnscaledCycleClock::Frequency(); } +void CycleClockSource::Register(CycleClockSourceFunc source) { + cycle_clock_source.store(source, std::memory_order_relaxed); +} + #else int64_t CycleClock::Now() { diff --git a/absl/base/internal/cycleclock.h b/absl/base/internal/cycleclock.h index 60e971583..9853a66ce 100644 --- a/absl/base/internal/cycleclock.h +++ b/absl/base/internal/cycleclock.h @@ -71,6 +71,20 @@ class CycleClock { CycleClock& operator=(const CycleClock&) = delete; }; +using CycleClockSourceFunc = int64_t (*)(); + +class CycleClockSource { + private: + // CycleClockSource::Register() + // + // Register a function that provides an alternate source for the unscaled CPU + // cycle count value. The source function must be async signal safe, must not + // call CycleClock::Now(), and must have a frequency that matches that of the + // unscaled clock used by CycleClock. A nullptr value resets CycleClock to use + // the default source. + static void Register(CycleClockSourceFunc source); +}; + } // namespace base_internal } // namespace absl diff --git a/absl/base/internal/per_thread_tls.h b/absl/base/internal/per_thread_tls.h index 2428bdc12..56359853b 100644 --- a/absl/base/internal/per_thread_tls.h +++ b/absl/base/internal/per_thread_tls.h @@ -16,13 +16,17 @@ #define ABSL_BASE_INTERNAL_PER_THREAD_TLS_H_ // This header defines two macros: +// // If the platform supports thread-local storage: -// ABSL_PER_THREAD_TLS_KEYWORD is the C keyword needed to declare a -// thread-local variable ABSL_PER_THREAD_TLS is 1 +// +// * ABSL_PER_THREAD_TLS_KEYWORD is the C keyword needed to declare a +// thread-local variable +// * ABSL_PER_THREAD_TLS is 1 // // Otherwise: -// ABSL_PER_THREAD_TLS_KEYWORD is empty -// ABSL_PER_THREAD_TLS is 0 +// +// * ABSL_PER_THREAD_TLS_KEYWORD is empty +// * ABSL_PER_THREAD_TLS is 0 // // Microsoft C supports thread-local storage. // GCC supports it if the appropriate version of glibc is available, diff --git a/absl/container/BUILD.bazel b/absl/container/BUILD.bazel index e1880a8b5..623faf456 100644 --- a/absl/container/BUILD.bazel +++ b/absl/container/BUILD.bazel @@ -123,12 +123,21 @@ cc_library( ], ) +cc_library( + name = "counting_allocator", + testonly = 1, + hdrs = ["internal/counting_allocator.h"], + copts = ABSL_DEFAULT_COPTS, + visibility = ["//visibility:private"], +) + cc_test( name = "inlined_vector_test", srcs = ["inlined_vector_test.cc"], copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG, linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS, deps = [ + ":counting_allocator", ":inlined_vector", ":test_instance_tracker", "//absl/base", @@ -146,6 +155,7 @@ cc_test( srcs = ["inlined_vector_test.cc"], copts = ABSL_TEST_COPTS, deps = [ + ":counting_allocator", ":inlined_vector", ":test_instance_tracker", "//absl/base", @@ -443,6 +453,7 @@ cc_library( copts = ABSL_DEFAULT_COPTS, deps = [ ":have_sse", + "//absl/base", "//absl/base:core_headers", "//absl/debugging:stacktrace", "//absl/memory", diff --git a/absl/container/CMakeLists.txt b/absl/container/CMakeLists.txt index 4162d269e..de9b22f7e 100644 --- a/absl/container/CMakeLists.txt +++ b/absl/container/CMakeLists.txt @@ -122,6 +122,15 @@ absl_cc_library( PUBLIC ) +absl_cc_library( + NAME + counting_allocator + HDRS + "internal/counting_allocator.h" + COPTS + ${ABSL_DEFAULT_COPTS} +) + absl_cc_test( NAME inlined_vector_test @@ -132,6 +141,7 @@ absl_cc_test( LINKOPTS ${ABSL_EXCEPTIONS_FLAG_LINKOPTS} DEPS + absl::counting_allocator absl::inlined_vector absl::test_instance_tracker absl::base @@ -437,6 +447,7 @@ absl_cc_library( COPTS ${ABSL_DEFAULT_COPTS} DEPS + absl::base absl::have_sse absl::synchronization ) diff --git a/absl/container/inlined_vector.h b/absl/container/inlined_vector.h index fe228001b..b6063441a 100644 --- a/absl/container/inlined_vector.h +++ b/absl/container/inlined_vector.h @@ -795,79 +795,7 @@ class InlinedVector { void swap(InlinedVector& other) { if (ABSL_PREDICT_FALSE(this == &other)) return; - using std::swap; // Augment ADL with `std::swap`. - if (allocated() && other.allocated()) { - // Both out of line, so just swap the tag, allocation, and allocator. - swap(tag(), other.tag()); - swap(allocation(), other.allocation()); - swap(allocator(), other.allocator()); - return; - } - if (!allocated() && !other.allocated()) { - // Both inlined: swap up to smaller size, then move remaining elements. - InlinedVector* a = this; - InlinedVector* b = &other; - if (size() < other.size()) { - swap(a, b); - } - - const size_type a_size = a->size(); - const size_type b_size = b->size(); - assert(a_size >= b_size); - // `a` is larger. Swap the elements up to the smaller array size. - std::swap_ranges(a->inlined_space(), a->inlined_space() + b_size, - b->inlined_space()); - - // Move the remaining elements: - // [`b_size`, `a_size`) from `a` -> [`b_size`, `a_size`) from `b` - b->UninitializedCopy(a->inlined_space() + b_size, - a->inlined_space() + a_size, - b->inlined_space() + b_size); - a->Destroy(a->inlined_space() + b_size, a->inlined_space() + a_size); - - swap(a->tag(), b->tag()); - swap(a->allocator(), b->allocator()); - assert(b->size() == a_size); - assert(a->size() == b_size); - return; - } - - // One is out of line, one is inline. - // We first move the elements from the inlined vector into the - // inlined space in the other vector. We then put the other vector's - // pointer/capacity into the originally inlined vector and swap - // the tags. - InlinedVector* a = this; - InlinedVector* b = &other; - if (a->allocated()) { - swap(a, b); - } - assert(!a->allocated()); - assert(b->allocated()); - const size_type a_size = a->size(); - const size_type b_size = b->size(); - // In an optimized build, `b_size` would be unused. - static_cast(b_size); - - // Made Local copies of `size()`, don't need `tag()` accurate anymore - swap(a->tag(), b->tag()); - - // Copy `b_allocation` out before `b`'s union gets clobbered by - // `inline_space` - Allocation b_allocation = b->allocation(); - - b->UninitializedCopy(a->inlined_space(), a->inlined_space() + a_size, - b->inlined_space()); - a->Destroy(a->inlined_space(), a->inlined_space() + a_size); - - a->allocation() = b_allocation; - - if (a->allocator() != b->allocator()) { - swap(a->allocator(), b->allocator()); - } - - assert(b->size() == a_size); - assert(a->size() == b_size); + SwapImpl(other); } private: @@ -1238,6 +1166,83 @@ class InlinedVector { return begin() + index; } + void SwapImpl(InlinedVector& other) { + using std::swap; // Augment ADL with `std::swap`. + + if (allocated() && other.allocated()) { + // Both out of line, so just swap the tag, allocation, and allocator. + swap(tag(), other.tag()); + swap(allocation(), other.allocation()); + swap(allocator(), other.allocator()); + return; + } + if (!allocated() && !other.allocated()) { + // Both inlined: swap up to smaller size, then move remaining elements. + InlinedVector* a = this; + InlinedVector* b = &other; + if (size() < other.size()) { + swap(a, b); + } + + const size_type a_size = a->size(); + const size_type b_size = b->size(); + assert(a_size >= b_size); + // `a` is larger. Swap the elements up to the smaller array size. + std::swap_ranges(a->inlined_space(), a->inlined_space() + b_size, + b->inlined_space()); + + // Move the remaining elements: + // [`b_size`, `a_size`) from `a` -> [`b_size`, `a_size`) from `b` + b->UninitializedCopy(a->inlined_space() + b_size, + a->inlined_space() + a_size, + b->inlined_space() + b_size); + a->Destroy(a->inlined_space() + b_size, a->inlined_space() + a_size); + + swap(a->tag(), b->tag()); + swap(a->allocator(), b->allocator()); + assert(b->size() == a_size); + assert(a->size() == b_size); + return; + } + + // One is out of line, one is inline. + // We first move the elements from the inlined vector into the + // inlined space in the other vector. We then put the other vector's + // pointer/capacity into the originally inlined vector and swap + // the tags. + InlinedVector* a = this; + InlinedVector* b = &other; + if (a->allocated()) { + swap(a, b); + } + assert(!a->allocated()); + assert(b->allocated()); + const size_type a_size = a->size(); + const size_type b_size = b->size(); + // In an optimized build, `b_size` would be unused. + static_cast(b_size); + + // Made Local copies of `size()`, don't need `tag()` accurate anymore + swap(a->tag(), b->tag()); + + // Copy `b_allocation` out before `b`'s union gets clobbered by + // `inline_space` + Allocation b_allocation = b->allocation(); + + b->UninitializedCopy(a->inlined_space(), a->inlined_space() + a_size, + b->inlined_space()); + a->Destroy(a->inlined_space(), a->inlined_space() + a_size); + + a->allocation() = b_allocation; + + if (a->allocator() != b->allocator()) { + swap(a->allocator(), b->allocator()); + } + + assert(b->size() == a_size); + assert(a->size() == b_size); + } + // Stores either the inlined or allocated representation union Rep { using ValueTypeBuffer = diff --git a/absl/container/inlined_vector_test.cc b/absl/container/inlined_vector_test.cc index 3a1ea8ac1..b3dcc7f0a 100644 --- a/absl/container/inlined_vector_test.cc +++ b/absl/container/inlined_vector_test.cc @@ -30,6 +30,7 @@ #include "absl/base/internal/exception_testing.h" #include "absl/base/internal/raw_logging.h" #include "absl/base/macros.h" +#include "absl/container/internal/counting_allocator.h" #include "absl/container/internal/test_instance_tracker.h" #include "absl/hash/hash_testing.h" #include "absl/memory/memory.h" @@ -37,6 +38,7 @@ namespace { +using absl::container_internal::CountingAllocator; using absl::test_internal::CopyableMovableInstance; using absl::test_internal::CopyableOnlyInstance; using absl::test_internal::InstanceTracker; @@ -138,57 +140,6 @@ static IntVec Fill(int len, int offset = 0) { return v; } -// This is a stateful allocator, but the state lives outside of the -// allocator (in whatever test is using the allocator). This is odd -// but helps in tests where the allocator is propagated into nested -// containers - that chain of allocators uses the same state and is -// thus easier to query for aggregate allocation information. -template -class CountingAllocator : public std::allocator { - public: - using Alloc = std::allocator; - using pointer = typename Alloc::pointer; - using size_type = typename Alloc::size_type; - - CountingAllocator() : bytes_used_(nullptr) {} - explicit CountingAllocator(int64_t* b) : bytes_used_(b) {} - - template - CountingAllocator(const CountingAllocator& x) - : Alloc(x), bytes_used_(x.bytes_used_) {} - - pointer allocate(size_type n, - std::allocator::const_pointer hint = nullptr) { - assert(bytes_used_ != nullptr); - *bytes_used_ += n * sizeof(T); - return Alloc::allocate(n, hint); - } - - void deallocate(pointer p, size_type n) { - Alloc::deallocate(p, n); - assert(bytes_used_ != nullptr); - *bytes_used_ -= n * sizeof(T); - } - - template - class rebind { - public: - using other = CountingAllocator; - }; - - friend bool operator==(const CountingAllocator& a, - const CountingAllocator& b) { - return a.bytes_used_ == b.bytes_used_; - } - - friend bool operator!=(const CountingAllocator& a, - const CountingAllocator& b) { - return !(a == b); - } - - int64_t* bytes_used_; -}; - TEST(IntVec, SimpleOps) { for (int len = 0; len < 20; len++) { IntVec v; diff --git a/absl/container/internal/counting_allocator.h b/absl/container/internal/counting_allocator.h new file mode 100644 index 000000000..f4e652d96 --- /dev/null +++ b/absl/container/internal/counting_allocator.h @@ -0,0 +1,79 @@ +// Copyright 2018 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef ABSL_CONTAINER_INTERNAL_COUNTING_ALLOCATOR_H_ +#define ABSL_CONTAINER_INTERNAL_COUNTING_ALLOCATOR_H_ + +#include +#include +#include + +namespace absl { +namespace container_internal { + +// This is a stateful allocator, but the state lives outside of the +// allocator (in whatever test is using the allocator). This is odd +// but helps in tests where the allocator is propagated into nested +// containers - that chain of allocators uses the same state and is +// thus easier to query for aggregate allocation information. +template +class CountingAllocator : public std::allocator { + public: + using Alloc = std::allocator; + using pointer = typename Alloc::pointer; + using size_type = typename Alloc::size_type; + + CountingAllocator() : bytes_used_(nullptr) {} + explicit CountingAllocator(int64_t* b) : bytes_used_(b) {} + + template + CountingAllocator(const CountingAllocator& x) + : Alloc(x), bytes_used_(x.bytes_used_) {} + + pointer allocate(size_type n, + std::allocator::const_pointer hint = nullptr) { + assert(bytes_used_ != nullptr); + *bytes_used_ += n * sizeof(T); + return Alloc::allocate(n, hint); + } + + void deallocate(pointer p, size_type n) { + Alloc::deallocate(p, n); + assert(bytes_used_ != nullptr); + *bytes_used_ -= n * sizeof(T); + } + + template + class rebind { + public: + using other = CountingAllocator; + }; + + friend bool operator==(const CountingAllocator& a, + const CountingAllocator& b) { + return a.bytes_used_ == b.bytes_used_; + } + + friend bool operator!=(const CountingAllocator& a, + const CountingAllocator& b) { + return !(a == b); + } + + int64_t* bytes_used_; +}; + +} // namespace container_internal +} // namespace absl + +#endif // ABSL_CONTAINER_INTERNAL_COUNTING_ALLOCATOR_H_ diff --git a/absl/container/internal/hashtablez_sampler.cc b/absl/container/internal/hashtablez_sampler.cc index 6cc10c201..e588f24c2 100644 --- a/absl/container/internal/hashtablez_sampler.cc +++ b/absl/container/internal/hashtablez_sampler.cc @@ -238,6 +238,10 @@ HashtablezInfo* SampleSlow(int64_t* next_sample) { return HashtablezSampler::Global().Register(); } +#if ABSL_PER_THREAD_TLS == 1 +ABSL_PER_THREAD_TLS_KEYWORD int64_t next_sample = 0; +#endif // ABSL_PER_THREAD_TLS == 1 + void UnsampleSlow(HashtablezInfo* info) { HashtablezSampler::Global().Unregister(info); } diff --git a/absl/container/internal/hashtablez_sampler.h b/absl/container/internal/hashtablez_sampler.h index 4aea3ffa6..c42f1842f 100644 --- a/absl/container/internal/hashtablez_sampler.h +++ b/absl/container/internal/hashtablez_sampler.h @@ -31,6 +31,7 @@ #include #include +#include "absl/base/internal/per_thread_tls.h" #include "absl/base/optimization.h" #include "absl/synchronization/mutex.h" #include "absl/utility/utility.h" @@ -147,14 +148,16 @@ class HashtablezInfoHandle { // Returns an RAII sampling handle that manages registration and unregistation // with the global sampler. +#if ABSL_PER_THREAD_TLS == 1 +extern ABSL_PER_THREAD_TLS_KEYWORD int64_t next_sample; +#endif // ABSL_PER_THREAD_TLS + inline HashtablezInfoHandle Sample() { -#if ABSL_HAVE_THREAD_LOCAL - thread_local int64_t next_sample = 0; -#else // ABSL_HAVE_THREAD_LOCAL +#if ABSL_PER_THREAD_TLS == 0 static auto* mu = new absl::Mutex; static int64_t next_sample = 0; absl::MutexLock l(mu); -#endif // ABSL_HAVE_THREAD_LOCAL +#endif // !ABSL_HAVE_THREAD_LOCAL if (ABSL_PREDICT_TRUE(--next_sample > 0)) { return HashtablezInfoHandle(nullptr); diff --git a/absl/container/internal/raw_hash_set.h b/absl/container/internal/raw_hash_set.h index 34d69d7af..8cdea4ec8 100644 --- a/absl/container/internal/raw_hash_set.h +++ b/absl/container/internal/raw_hash_set.h @@ -785,7 +785,11 @@ class raw_hash_set { } ctrl_t* ctrl_ = nullptr; - slot_type* slot_; + // To avoid uninitialized member warnigs, put slot_ in an anonymous union. + // The member is not initialized on singleton and end iterators. + union { + slot_type* slot_; + }; }; class const_iterator { diff --git a/absl/copts/copts.py b/absl/copts/copts.py index 40a8062f3..4da8442de 100644 --- a/absl/copts/copts.py +++ b/absl/copts/copts.py @@ -10,8 +10,6 @@ compilation options: The generated copts are consumed by configure_copts.bzl and AbseilConfigureCopts.cmake. """ - -import collections # absl:google-only(used for internal flags) COPT_VARS = { "GCC_FLAGS": [ "-Wall", diff --git a/absl/synchronization/BUILD.bazel b/absl/synchronization/BUILD.bazel index 53e798845..43680046e 100644 --- a/absl/synchronization/BUILD.bazel +++ b/absl/synchronization/BUILD.bazel @@ -69,6 +69,10 @@ cc_library( "notification.h", ], copts = ABSL_DEFAULT_COPTS, + linkopts = select({ + "//absl:windows": [], + "//conditions:default": ["-pthread"], + }), deps = [ ":graphcycles_internal", "//absl/base", @@ -245,10 +249,6 @@ cc_test( "lifetime_test.cc", ], copts = ABSL_TEST_COPTS, - linkopts = select({ - "//absl:windows": [], - "//conditions:default": ["-pthread"], - }), tags = ["no_test_ios_x86_64"], deps = [ ":synchronization", diff --git a/absl/time/internal/cctz/BUILD.bazel b/absl/time/internal/cctz/BUILD.bazel index e2cfe801f..a2053c974 100644 --- a/absl/time/internal/cctz/BUILD.bazel +++ b/absl/time/internal/cctz/BUILD.bazel @@ -98,13 +98,13 @@ cc_test( cc_test( name = "time_zone_lookup_test", size = "small", + timeout = "moderate", srcs = ["src/time_zone_lookup_test.cc"], data = [":zoneinfo"], tags = [ "no_test_android_arm", "no_test_android_arm64", "no_test_android_x86", - "no_test_wasm", ], deps = [ ":civil_time", diff --git a/absl/time/internal/cctz/src/time_zone_format_test.cc b/absl/time/internal/cctz/src/time_zone_format_test.cc index cd0ae23f3..b99e1c635 100644 --- a/absl/time/internal/cctz/src/time_zone_format_test.cc +++ b/absl/time/internal/cctz/src/time_zone_format_test.cc @@ -64,17 +64,6 @@ void TestFormatSpecifier(time_point tp, time_zone tz, const std::string& fmt, EXPECT_EQ("xxx " + ans + " yyy", format("xxx " + fmt + " yyy", tp, tz)); } -// These tests sometimes run on platforms that have zoneinfo data so old -// that the transition we are attempting to check does not exist, most -// notably Android emulators. Fortunately, AndroidZoneInfoSource supports -// time_zone::version() so, in cases where we've learned that it matters, -// we can make the check conditionally. -int VersionCmp(time_zone tz, const std::string& target) { - std::string version = tz.version(); - if (version.empty() && !target.empty()) return 1; // unknown > known - return version.compare(target); -} - } // namespace // @@ -174,7 +163,9 @@ TEST(Format, PosixConversions) { TestFormatSpecifier(tp, tz, "%M", "00"); TestFormatSpecifier(tp, tz, "%S", "00"); TestFormatSpecifier(tp, tz, "%U", "00"); +#if !defined(__EMSCRIPTEN__) TestFormatSpecifier(tp, tz, "%w", "4"); // 4=Thursday +#endif TestFormatSpecifier(tp, tz, "%W", "00"); TestFormatSpecifier(tp, tz, "%y", "70"); TestFormatSpecifier(tp, tz, "%Y", "1970"); @@ -1464,6 +1455,10 @@ TEST(FormatParse, RoundTrip) { #if defined(_WIN32) || defined(_WIN64) // Initial investigations indicate the %c does not roundtrip on Windows. // TODO: Figure out what is going on here (perhaps a locale problem). +#elif defined(__EMSCRIPTEN__) + // strftime() and strptime() use different defintions for "%c" under + // emscripten (see https://github.com/kripken/emscripten/pull/7491), + // causing its round-trip test to fail. #else // Even though we don't know what %c will produce, it should roundtrip, // but only in the 0-offset timezone. diff --git a/absl/time/internal/cctz/src/time_zone_lookup_test.cc b/absl/time/internal/cctz/src/time_zone_lookup_test.cc index e84b9469a..e9865659f 100644 --- a/absl/time/internal/cctz/src/time_zone_lookup_test.cc +++ b/absl/time/internal/cctz/src/time_zone_lookup_test.cc @@ -666,6 +666,7 @@ int VersionCmp(time_zone tz, const std::string& target) { } // namespace +#if !defined(__EMSCRIPTEN__) TEST(TimeZones, LoadZonesConcurrently) { std::promise ready_promise; std::shared_future ready_future(ready_promise.get_future()); @@ -713,6 +714,7 @@ TEST(TimeZones, LoadZonesConcurrently) { } EXPECT_LE(failures.size(), max_failures) << testing::PrintToString(failures); } +#endif TEST(TimeZone, NamedTimeZones) { const time_zone utc = utc_time_zone(); diff --git a/absl/time/internal/cctz/testdata/version b/absl/time/internal/cctz/testdata/version index ac954d74f..63f58006e 100644 --- a/absl/time/internal/cctz/testdata/version +++ b/absl/time/internal/cctz/testdata/version @@ -1 +1 @@ -2018g-9-gf0d2759 +2018i diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Africa/Sao_Tome b/absl/time/internal/cctz/testdata/zoneinfo/Africa/Sao_Tome index d2a64bd1d3d5e7bbdf3b44882005ff9420c12e68..59f3759c409a1fb50e632ef5ef613d3fee7af7ef 100644 GIT binary patch literal 254 zcmWHE%1kq2zyPca3=AL)l3;=K)ZwQ0CZwN!UV+aES10zU~k%55}JOBUx|3A*=uK|b#*$pxR QWIu?e#0^~Tz99x&0Q0IRegFUf literal 225 zcmWHE%1kq2zyK@^3=AL)l3<3ic^ViP7$!aIYl!mf5MX3tW?*0oU|{(F|9dh>6+{uA y00W1QZwQ0CZwN!UV+aES10xudV$J{m|NqC?{51g4AnQP;lVK%SxMPT}Ar}C@yd(Ai diff --git a/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla b/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla index 26356078f8d158e6cea100856baf7620a3296b84..85a7e16e165d79dbea866996b084d8ddcf72cb2e 100644 GIT binary patch delta 24 gcmZqVZsguDfsv7M^F+o#W=5vT4_VYEbFx+d09MQfuK)l5 delta 32 ocmZqVZsguDfpPLQM#ahV8QC^(XVhk%{EbC;@_!bt$^TiJ0J^9P&j0`b diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hong_Kong b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hong_Kong index 8e5c5813666a4d023bc9f7f7bd0e53ca1a61dd85..91eaff488f8c550346aede494d1154e4fe7adf48 100644 GIT binary patch delta 298 zcmbQvxtw!?xF#C|0|N*%FfcHM#3=G*^AiV_*3@i)`brTpl7#PYsAZ!L+1_qG0k8cQrhc^fZ zhcI{rhk(?>@dR;Oko_PG5`(+p|NsC0LGA$2Ah&?&+mj7IG{{XL8sx6YLQJ_#+n#T3 WWSYo`;xrEiN}a~#;T@uD!36**cuvy* delta 271 zcmZ3^Ih}KYxF#zD0|N*%FfcHXy}t)7}*gmwb{6COViht%;sk zev*ZWk%@V-B8#0N6C)D?LpB#kYuyA!76yib1_n+BhPnw1yb!jJZwP~jcQA+uVekqL znY^1($rfZA2!pi2ZT$cL|9_CJAR1&dhz8jXqCqYI(I8h$mSW0fS`)pwlW8I&+#${+ RI|O7m6mxlahv-^x0RRbLOl$xE diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qostanay b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qostanay new file mode 100644 index 0000000000000000000000000000000000000000..cb6e2d90f8139c67cd9d2318a2fa1219130d3270 GIT binary patch literal 1033 zcmWHE%1kq2zyRC~3=AL)k}!d?1y)IR#B5#s*FjXhdxMz70R?f6jSAvFKQEAY`DugX zZFL2yGvynk_q1G)SyOsJc23#_xt{O~@--e86ml#tD8^`AQ1X$!plri)K}GxT1y$*H z7u2}#Ur=Y|4p9H{CqU!L?*z??#R-~M?geNaIUk_Cj1|Vh70xo|Nm!XVrF4xVrF7yWkZ7O97r5w2{u+X zPEG~}>m{H-v2b8uVPJ3zVBlb22uWb%0g((ms3L9wj2sLM5S1YbAX$(~AKwrLZ37bq zZ39yVZ38oqVGIn6U;tr*NmAnF|NsC0L2(13LGc4J02D_c8Wc|;8WdMx`se2bAQ}{B zAQ}{JAQ}{RAQ}{ZAQ}{hAQ}{pAQ}{xAQ}{(AQ}{>AQ}{}AQ}|6AQ}|EAQ}|MAQ}|U zAQ}|cAQ}|kVEW6S01yp|cMuJVdoX?F9#|Zd20(mJIsnn2v;d+(=>bH8(gcVGr3(-Z zN*f>=ls-T-D2;$lfoM>g0@0v!1)@P|3q*s`7l;O>F%Ui2(;1hIwt<GA?Wn93Bs*ID% MM%%#5PS=bJ0Q%DroB#j- diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran index ad9058b4937b8786f58e2cbd61adff5ffb6f0657..0ae2f65fcdaa2f57b2def772d7a3f4bd93b27ea0 100644 GIT binary patch delta 881 zcmZ3%yGdk%GGod{l^Kka4=|=oHew5zT*;)&cxv-pCLQMbhQK%v1_lO(M&~CMAiBwD z;t3GltSY_(M7IbZ1_@|%eP;z1@k*jF@yP?J2ryVcda%DtM8uq z1T5dvlLeOVt(E}G_vOw5$=5UV$Ib-{ObAd02{25wy8zZO$uJD8VX^`XSbmC77g&BO zqd8c9>gT;+`Du^$fcev}If3~zj(h;CpSisZtbW!qWw8A087sl^bK1kf@^dTiS}-uw zGce4{yaN`PACm;uu)v!itYM+;RIr9cI?iDE#d0UX@=JKj!17D}{{hP{eg7NGU-qaG z%wK*{AFO`G;jLixD>o&9kB`3iO)}{M{6|4{U1M@d{ zUIFtrS~P(*Y|`cc8@O3=D_DLDk2P3+%deMU`K@pB!SdVg=7IU!&wl~)ckEjTR=;zj zI#~U#`B%a6yC+3k)Pv%9Pa_9d!QSFNu!4QbyDA7R%3%OCl<4lIB4?E;zS=)n7C+2FqVk*$I}vESwIOzry+!EPv(e8!-Rs ziy|=p+I4xb`s*i`g4N&H5e$~UxytA!Si!BCZD0krdw9SK?$mID`FHasg8BDi?ZF!E l`yaIc=b{IUE|VWHDor+G%i=S))HgEG@iHpZtL%WwJa|1!L;w8B99N$YPM#3=G*^AiV_*3@i)`brTpl7#PYsAZ!L+1_qG0k8cQrhc^fZ zhcI{rhk(?>@dR;Oko_PG5`(+p|NsC0LGA$2Ah&?&+mj7IG{{XL8sx6YLQJ_#+n#T3 WWSYo`;xrEiN}a~#;T@uD!36**cuvy* delta 271 zcmZ3^Ih}KYxF#zD0|N*%FfcHXy}t)7}*gmwb{6COViht%;sk zev*ZWk%@V-B8#0N6C)D?LpB#kYuyA!76yib1_n+BhPnw1yb!jJZwP~jcQA+uVekqL znY^1($rfZA2!pi2ZT$cL|9_CJAR1&dhz8jXqCqYI(I8h$mSW0fS`)pwlW8I&+#${+ RI|O7m6mxlahv-^x0RRbLOl$xE diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Iran b/absl/time/internal/cctz/testdata/zoneinfo/Iran index ad9058b4937b8786f58e2cbd61adff5ffb6f0657..0ae2f65fcdaa2f57b2def772d7a3f4bd93b27ea0 100644 GIT binary patch delta 881 zcmZ3%yGdk%GGod{l^Kka4=|=oHew5zT*;)&cxv-pCLQMbhQK%v1_lO(M&~CMAiBwD z;t3GltSY_(M7IbZ1_@|%eP;z1@k*jF@yP?J2ryVcda%DtM8uq z1T5dvlLeOVt(E}G_vOw5$=5UV$Ib-{ObAd02{25wy8zZO$uJD8VX^`XSbmC77g&BO zqd8c9>gT;+`Du^$fcev}If3~zj(h;CpSisZtbW!qWw8A087sl^bK1kf@^dTiS}-uw zGce4{yaN`PACm;uu)v!itYM+;RIr9cI?iDE#d0UX@=JKj!17D}{{hP{eg7NGU-qaG z%wK*{AFO`G;jLixD>o&9kB`3iO)}{M{6|4{U1M@d{ zUIFtrS~P(*Y|`cc8@O3=D_DLDk2P3+%deMU`K@pB!SdVg=7IU!&wl~)ckEjTR=;zj zI#~U#`B%a6yC+3k)Pv%9Pa_9d!QSFNu!4QbyDA7R%3%OCl<4lIB4?E;zS=)n7C+2FqVk*$I}vESwIOzry+!EPv(e8!-Rs ziy|=p+I4xb`s*i`g4N&H5e$~UxytA!Si!BCZD0krdw9SK?$mID`FHasg8BDi?ZF!E l`yaIc=b{IUE|VWHDor+G%i=S))HgEG@iHpZtL%WwJa|1!L;w8B99N$YPRjsSHgL>#t;A7qyu!y_#Ep0|Nqa( z#LURT%F4hn=K)C1tPKn-3=BOB7&sUh>LxJo{Qn>Bz#zcDu;KuNh>vdwgSMd|gSMdo zgSLSsgRY?wgSH{6BS>-9|NsC0*O^HufM}5OKs3mSAR6pU5Ti{x0OT%^b3rr>oXlmT MZD?etYiPs;0H4}WH2?qr literal 250 zcmWHE%1kq2zyK@^3=AL)k^s>lEYQHf!0^9KIzXpn&w={?|Nk>GF*7qT%y|G(G;0F` z%m4r34h$R&3@Z*W@c8(KFlZYZGUyr_F=!hiY#_zH|NsC0uQQWS0MQ_OLH2;`2GQi& P&t;=+Xk@2rXv75o+D$OG diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chuuk b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chuuk index e79bca2dafa7e914a9baa568edec1b428a2ac63d..8004d65bbe563273c0ca626a4a15e7a65185ce10 100644 GIT binary patch literal 287 zcmWHE%1kq2zyK@^3=AL)l3;_fc^ViP7-k4Aez3su=ZBN8xDqZ2@_nfP|NlQD6C)EN z?)U;wdwd_x$t4GkEy4J<*@V2s07Rt5$J5C*AXhq8J8|NsAA zl%+bKWz)=7H|9?hC28KQ#kW|kC1{NRR5C&~S0}z*i d6x06y|Np~swcxBxn988ZL? diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guam b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guam index ffdf8c24b86220d1bc67908fa080a37f250544db..e22424758f8d04d3389b3d361bde0058b02ca6a0 100644 GIT binary patch literal 516 zcmWHE%1kq2zyPca3=AL)k`RHiMH?6x7*3l{eQ-gq^TQkSeGKo-eth^nn}OkZ&jJPkAKwrL_uvo)Z39aNcb5+_M1wpBqCp-6(I8KPXpl!i zG|00c8th>Z1LSEC4e~h1^yxYv5*z>^1}G3fG$&z;sPJSR*KK lKzvXDfoMn|F*C8CK~`8OwQm6_BP*;J7`Q;8r)y}y1pvU)h>idN literal 216 zcmWHE%1kq2zyQn)3=AL)l3;?ec^eoQ7_6M*5*V5O|2H!MN%bsXU}0eBS-`;I;~T=@ z9vs5poDm!Xl3`$Az+p5C0|Q7CSP{qy5TEz||Ns9*9v(ddqU+3beL%7htC(SSwQm6l Q;l%+tWY!0^9KI>4+u-J$;f|No3kjEoEnGtPh%&DsD` zzv2J`2Ll6$?c*E5plxW#plygSofNzN|NsBL&P>JxM1$-E*#WW_M3ZATmyNcep`EUw GAr}CgW-DI+ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kwajalein b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kwajalein index 54bd71ff2dc7d7fc6f3ddb6e3e5ceed4c92b72f5..d6413577f980dfb40e8a187483117f367677eef3 100644 GIT binary patch literal 340 zcmWHE%1kq2zyNFv3=AL)l3<6jB^nqQ7!JNQy>RjsSHgL>#t;A7qyu!y_#Ep0|Nqa( z#LURT%F4hn=K)C1tPKn-3=BOB7&sUh>LxJo{Qn>Bz#zcDu;KuNh>vdwgSMd|gSMdo zgSLSsgRY?wgSH{6BS>-9|NsC0*O^HufM}5OKs3mSAR6pU5Ti{x0OT%^b3rr>oXlmT MZD?etYiPs;0H4}WH2?qr literal 250 zcmWHE%1kq2zyK@^3=AL)k^s>lEYQHf!0^9KIzXpn&w={?|Nk>GF*7qT%y|G(G;0F` z%m4r34h$R&3@Z*W@c8(KFlZYZGUyr_F=!hiY#_zH|NsC0uQQWS0MQ_OLH2;`2GQi& P&t;=+Xk@2rXv75o+D$OG diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Majuro b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Majuro index 53f32886d08156820aaf860bcaedd3009c35f601..65990cbba94137c966b638c552393651261a92e6 100644 GIT binary patch literal 330 zcmWHE%1kq2zyPca3=AL)lHh={MH(0w7-k4gy|BRY=ZAxDO)s2$#g%a0*1h0=n{+_^ z|Ns9PnHZUw7+F{t7#4t(GR)e*z{0>#H-UkJfuUys0}lhkiUSM+KE5Fg+J=S<+6I;k z+J*)U+J?yXlj5HL|NsB5GZSe5(I9t$Xpq}LG{}7*8stV04R$Ap(Iy=L@)Wh)%Vnc& LXk@2rXv75o2p(65 literal 212 zcmWHE%1kq2zyQn)3=AL)k^s>l%+tWY!0^9KI-vgl|No3kObiSQKq3sYHZZU-FswMh vz~SQ?!k}$v$e?WqGm;eJ|NsC0zs^jg0YrnW0ohH0Ra`dOhDLU}hDKZfj`Jm{ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Nauru b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Nauru index 7e7d920e11396d3b210f28c1d69389bc68d33548..86d3b7d1e72f8af1e2c5dc2b8f01a37a8b129842 100644 GIT binary patch delta 61 zcmeBS>S3B-z;kB8%M+KJ)jtR-u6QxgrdR^R|NsC0e~=gh0|Ns{97IpFvF75k(Ka-) J(={~W0sv)v7x4f9 delta 61 zcmeBS>S3B-z;k-bevb=I0R@8HEGH(~6ia~k|NsC04-#WwU|;}=gXoDi)?8dR+J;7U Ix`swv00}A;djJ3c diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Palau b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Palau index 968f1956c8eefeb78d96651051befba0b1a3ab82..05633b88e720d8df3dbec52141dfbda4fcce416f 100644 GIT binary patch delta 87 zcmZ3>xQ}sy8O#6wI#VW25Si#FZpO^OzyQJwP#VPM`2YX^f02jhb3k;Rnb{kVWc~mD c{~4K>Kw23XCiX~hGca)3Xd77C=~{9D0ODyJZ~y=R delta 69 zcmdnTxR!B(84CkLoybHh?TO-|#{d8S|6gZj_J)Chfua8Y|No4PAW0CfZUO^~k8cQr Twt*#x%fMx$ZD47qYsm!w3E>j0 diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pohnpei b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pohnpei index d3393a20d85209df94887e0de0c88e08442e4009..090429c09e766d547d4b9b6b583c5593b5028c5f 100644 GIT binary patch literal 325 zcmWHE%1kq2zyPca3=AL)l3<6j1sWI_7-k4gy|BRY=ZAxDO)s2$#g%YLkncnN|Ns9P znHZUw7#aWnce(=7Giw6_3j;&l1O^TUhMolsJPZsV5g*?W25mz_25kdN25mzFkU}WN z;S4qg1_lrYsp5dL1^)m4|6k@G{~7CLm*CN hW@2GxVuHDKN(e{> literal 174 zcmWHE%1kq2zyM4P3=AL)k^s>l%+bKWz)=7H|9?hC28JmiAgNg!7+8FKLm0FT4MAK6 eQcU~*|Ns9wGlexEjrdLFve7m)w9_>-@G{~7CLm*CN hW@2GxVuHDKN(e{> literal 174 zcmWHE%1kq2zyM4P3=AL)k^s>l%+bKWz)=7H|9?hC28JmiAgNg!7+8FKLm0FT4MAK6 eQcU~*|Ns9wGlexEjrdLFve7m)w9_>-Z&jJPkAKwrL_uvo)Z39aNcb5+_M1wpBqCp-6(I8KPXpl!i zG|00c8th>Z1LSEC4e~h1^yxYv5*z>^1}G3fG$&z;sPJSR*KK lKzvXDfoMn|F*C8CK~`8OwQm6_BP*;J7`Q;8r)y}y1pvU)h>idN literal 216 zcmWHE%1kq2zyQn)3=AL)l3;?ec^eoQ7_6M*5*V5O|2H!MN%bsXU}0eBS-`;I;~T=@ z9vs5poDm!Xl3`$Az+p5C0|Q7CSP{qy5TEz||Ns9*9v(ddqU+3beL%7htC(SSwQm6l Q;?)U;wdwd_x$t4GkEy4J<*@V2s07Rt5$J5C*AXhq8J8|NsAA zl%+bKWz)=7H|9?hC28KQ#kW|kC1{NRR5C&~S0}z*i d6x06y|Np~swcxBxn988ZL? diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Yap b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Yap index e79bca2dafa7e914a9baa568edec1b428a2ac63d..8004d65bbe563273c0ca626a4a15e7a65185ce10 100644 GIT binary patch literal 287 zcmWHE%1kq2zyK@^3=AL)l3;_fc^ViP7-k4Aez3su=ZBN8xDqZ2@_nfP|NlQD6C)EN z?)U;wdwd_x$t4GkEy4J<*@V2s07Rt5$J5C*AXhq8J8|NsAA zl%+bKWz)=7H|9?hC28KQ#kW|kC1{NRR5C&~S0}z*i d6x06y|Np~swcxBxn988ZL? diff --git a/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab b/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab index 2729e6e8f..9a8e4244f 100644 --- a/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +++ b/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab @@ -211,6 +211,7 @@ KP +3901+12545 Asia/Pyongyang KR +3733+12658 Asia/Seoul KZ +4315+07657 Asia/Almaty Kazakhstan (most areas) KZ +4448+06528 Asia/Qyzylorda Qyzylorda/Kyzylorda/Kzyl-Orda +KZ +5312+06337 Asia/Qostanay Qostanay/Kostanay/Kustanay KZ +5017+05710 Asia/Aqtobe Aqtöbe/Aktobe KZ +4431+05016 Asia/Aqtau Mangghystaū/Mankistau KZ +4707+05156 Asia/Atyrau Atyraū/Atirau/Gur'yev