From b16aeb6756bdab08cdf12d40baab5b51f7d15b16 Mon Sep 17 00:00:00 2001 From: Abseil Team <absl-team@google.com> Date: Mon, 7 Jan 2019 09:01:16 -0800 Subject: [PATCH] Export of internal Abseil changes. -- 5f1cf6547231f1b1daad6d1b785df6b0b999b3c9 by Samuel Benzaquen <sbenza@google.com>: 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 <johnsoncj@google.com>: Factors out the implementation of InlinedVector::swap(...) into a private member function PiperOrigin-RevId: 228173383 -- f1432ad3a8b05285c6d55bc4754cfae765485b7f by Abseil Team <absl-team@google.com>: Import of CCTZ from GitHub. PiperOrigin-RevId: 227891984 -- 03fc00c7a4efc6000e6d9125cb2e252bffda76fe by Andy Getzendanner <durandal@google.com>: Add a missing linebreak to a comment and markdownify two unordered lists. PiperOrigin-RevId: 227861389 -- 0d66c9afba4fc9aa52e61d9fb410e165018a7b48 by Abseil Team <absl-team@google.com>: Add an API to register a new source for the cycle clock. PiperOrigin-RevId: 227779218 -- 14d3f9b70c8818b8541e5fb2f6ca4c59d479de31 by Andy Getzendanner <durandal@google.com>: Correct a typo in a stripping marker. PiperOrigin-RevId: 227750014 -- 59df88740f4e315beb57a8772f8bcf7879440c74 by Matt Kulukundis <kfm@google.com>: Switch thread local handling to be more cross platform PiperOrigin-RevId: 227695133 -- 75deed5bfcb5c42534e933f104aa7d94e11e348d by Abseil Team <absl-team@google.com>: Rollback workaround toolchain bug for incorrect handling of thread_local in inline functions PiperOrigin-RevId: 227689133 -- 54994bf0afec026e6e0e7a199df0bbb4b7d9a4aa by Derek Mauro <dmauro@google.com>: 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 <dmauro@google.com>: Internal change PiperOrigin-RevId: 227582833 -- 506c9b8e9002ca3389c7040473b68d4cbf94bdcc by Matt Kulukundis <kfm@google.com>: Workaround toolchain bug for incorrect handling of thread_local in inline functions PiperOrigin-RevId: 227561449 -- 29ee90d96dfe3114cf93f9bb92ea0cc9e768a407 by Derek Mauro <dmauro@google.com>: 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 2717df0c..49ae1824 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 a742df01..9eb13b8c 100644 --- a/absl/base/internal/cycleclock.cc +++ b/absl/base/internal/cycleclock.cc @@ -22,6 +22,7 @@ #include "absl/base/internal/cycleclock.h" +#include <atomic> #include <chrono> // 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<CycleClockSourceFunc> 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 60e97158..9853a66c 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 2428bdc1..56359853 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 e1880a8b..623faf45 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 4162d269..de9b22f7 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 fe228001..b6063441 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<void>(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<void>(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 3a1ea8ac..b3dcc7f0 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 <typename T> -class CountingAllocator : public std::allocator<T> { - public: - using Alloc = std::allocator<T>; - 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 <typename U> - CountingAllocator(const CountingAllocator<U>& x) - : Alloc(x), bytes_used_(x.bytes_used_) {} - - pointer allocate(size_type n, - std::allocator<void>::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<typename U> - class rebind { - public: - using other = CountingAllocator<U>; - }; - - 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 00000000..f4e652d9 --- /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 <cassert> +#include <cstdint> +#include <memory> + +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 <typename T> +class CountingAllocator : public std::allocator<T> { + public: + using Alloc = std::allocator<T>; + 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 <typename U> + CountingAllocator(const CountingAllocator<U>& x) + : Alloc(x), bytes_used_(x.bytes_used_) {} + + pointer allocate(size_type n, + std::allocator<void>::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<typename U> + class rebind { + public: + using other = CountingAllocator<U>; + }; + + 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 6cc10c20..e588f24c 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 4aea3ffa..c42f1842 100644 --- a/absl/container/internal/hashtablez_sampler.h +++ b/absl/container/internal/hashtablez_sampler.h @@ -31,6 +31,7 @@ #include <memory> #include <vector> +#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 34d69d7a..8cdea4ec 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 40a8062f..4da8442d 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 53e79884..43680046 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 e2cfe801..a2053c97 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 cd0ae23f..b99e1c63 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<D> 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 e84b9469..e9865659 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<void> ready_promise; std::shared_future<void> 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 ac954d74..63f58006 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%1kq2zyPd35fBCe79a+(c^ZJkq-T8%QJx(FF<QGPFfuU%<=6rk82<nNo(z-( z0iXz<00Rev?c*E5;10y$jv+t+Mvx$o2qD4F|3DCD^Va}GgX{(w0kR)NQ{o0LptB6P E0Q0IRegFUf literal 225 zcmWHE%1kq2zyK^j5fBCeW*`Q!c^ZJkq-T8%QJx(Fj7&gbwg3i(|Np-y1I0lAsEAL1 ufy2i)guxw%!yQ9_f{b7sLV`8_fgsN2uK|b#SqC(Lfeb6TfcEPeasdFpyd(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 ncmZqVZsguDfpPLQM#ahV8QC^(XVhk%{EbC;@_!aCAZ`Kxx~L1! 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+yfGZG#*n+K@$rDcbT3DRAJ=x&2cVWdP-_0K;I+!wTdp@!J zBnu-GGs|Q}7PHCmjNFb44B1>Dy#);nEDQ{F6Bs!d7|J^!YzAJ4xQ}lLgNHW=2Zu0t z0WmU|Aa0A*4gY}v<PH!GatoLSx(7sq+ytUQ?wTyblnZp&=0>K8j3`d?px9|#Ku7CZ GZ~*`*cuvy* delta 271 zcmZ3^Ih}KYxF#zD0|N+yfGZG#*n+K@QQuC!3g2<+meq>W-W3g(e3A+#I+!x8iJn+~ zl7)$piFvXji=82m!N8Es1=3nKfsuuQp`d|*6U1iVg|K~mLl``~gF!?HgI93K<lT%) zwpeZa4+J1vK{Uu_5Dl^&M1x!aqCu{hEX9-ybjIdRriqMjhd7h$5Rj9hfD7n0T?;M% D31CcY 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 zcmd6lPe@a79Ke5@TKnUnOQ}ukmFZKLW^<02bFRziVDLo-f=t-K1i@1z2?|1t2=t~W z@gOQ5qQitbRp6mx(D%?ys*4v1I#id?F@K-8%b=4te~;hq^V|D99=v@%xyjj?nE7vn z?Hwi~ZYTRIuUlT_-|dt$SKXD;wdMn-DX{M}{rj`keEhrAa_BnOKR+);J`}a}&Ahg4 z&ghNR3B9@WNS(PMy_N6L+hY-JPc`bDXjwZVzqB*_L*0h3xPMQj>*%D=y|7d0{`y^d zK7Ens+XK0~yDz=#+tOEDlY7sK(my>f_oucr_H<DPMqX%qd`bt~rZo{8)kHa~$w*$3 z-@0_@BrOj<hIIJQk<^|mBk%o^ei@X}jU&lC`6&;JMwcs<iqBtHU+1@1!=;+*a-il% z?Sb6~gT@T+@~0#-rrwyWn1C_4g0GR)*tPafR($rf`egN#C&wP=Ote34=b)VlUS^EX z8`ZtH=FZ{8eo6&55I?*CM-WdCS01e|h%<;ch&zZsh(m}+h)al1h*OAHh+BwXh+~Ln zh--*%kJdTFJH)+5>mSkpqytC`kRBjSK)Qgm0qFzM2&5B8E0A6w&3LrkK-%$W`++nB i=?Kyiq$fyIkggzYLHdF;2A8dqi`-c#WgATQCPHTx4%{CA literal 0 HcmV?d00001 diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qyzylorda b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qyzylorda index 00b278440592895901730ba41ae6fa14b6f94107..fc636b3b868bf26e31c7616d7f08278bb7c00b79 100644 GIT binary patch delta 123 zcmey#KAmHNxF9zJ0|N+yfGH4jPt>@;5+i+M!NectOiWCZ4H#|M7#Q3F7&s>9Fsd*y gFksWOc?aVHMh=iJkTF<w0`1_k(Kax((>3J+0BaEy<p2Nx delta 90 zcmbQv@soXmxF8n;0|N+yfC&(DP1LwBIhWa-kz?{QW}C?`m{qVT+I*C80VAq1PA(g5 K12a2aGcEx7(-E8i 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 zcmW-gT}V@L07viDGAS)+LIzRMl!6A*7Hts~q+lgvR_H_7!;&N+g$lvGmX@<@nsd!I z%bBI-cg>HS<xJC+Tbf$xvbK^EQb-Ci=nHB)_vO#I=luTn>DGichZRZ16l;V@G<1t8 z26@l{Lso!PbhVTP$O1JN5)SVad{1`tl*)hR$o2jH^J3&OoBzBdao}@<;_$h1Kk?en z=ka;&bMR$XAbiDUrO&Td(qA=C;dQz+e8HJ;eBp76-)n?x$z{AK+AC$C-!{ykctaus z!|HkX>r3<TMp213ez)UGK6S!3#&^J`zHjvA_DuTHYAODvsTO}LF9~0k<@I@uAXtuh zcu{^x&ER(25(X7pjSTL{qVacEI`NgEnfS_ofALjc|G?EBv*CLqQS>#vZS=LxYJ6Sg zG``+Yf^X2SQ2D<vG@f!2G^NH9+)vsAKiD-2TU9v>n%4(&VaxJ1d~3)SeCzKSeA{dW z{-HM=ZXcS1ZCw@g9oDt<kIKjJkBbkg{NEQkvx5ojCkqL>jugO85+!hVOb>$|Wh@sy zjhw^xhM&gwEm()|`_+VZ%rwH!JPP=^Ym&a-ew5zX5QcYIN;L#83StQcG=l_#83XW3 z^*(qgL0~W(t)(B4EAX!(I`FS0srb?Pv-r^;U*NIn6Y#iu6}{V8MgPXOA3sqipCEW^ z))Ktag%EhoE`q)3diZ_vb_O5f9V-5!NioJSDX#JTO=*jjo1^3#WxM5@6uxuef8yo! AHvj+t delta 62 zcmdlavVwPlGGppSl^KjI_5c6>pZtL%WwJa|1!L;w8B99N$YP<B`MAV*EDZDwbi9nr IO!N)701eg_2LJ#7 diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Hongkong b/absl/time/internal/cctz/testdata/zoneinfo/Hongkong index 8e5c5813666a4d023bc9f7f7bd0e53ca1a61dd85..91eaff488f8c550346aede494d1154e4fe7adf48 100644 GIT binary patch delta 298 zcmbQvxtw!?xF#C|0|N+yfGZG#*n+K@$rDcbT3DRAJ=x&2cVWdP-_0K;I+!wTdp@!J zBnu-GGs|Q}7PHCmjNFb44B1>Dy#);nEDQ{F6Bs!d7|J^!YzAJ4xQ}lLgNHW=2Zu0t z0WmU|Aa0A*4gY}v<PH!GatoLSx(7sq+ytUQ?wTyblnZp&=0>K8j3`d?px9|#Ku7CZ GZ~*`*cuvy* delta 271 zcmZ3^Ih}KYxF#zD0|N+yfGZG#*n+K@QQuC!3g2<+meq>W-W3g(e3A+#I+!x8iJn+~ zl7)$piFvXji=82m!N8Es1=3nKfsuuQp`d|*6U1iVg|K~mLl``~gF!?HgI93K<lT%) zwpeZa4+J1vK{Uu_5Dl^&M1x!aqCu{hEX9-ybjIdRriqMjhd7h$5Rj9hfD7n0T?;M% D31CcY 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 zcmW-gT}V@L07viDGAS)+LIzRMl!6A*7Hts~q+lgvR_H_7!;&N+g$lvGmX@<@nsd!I z%bBI-cg>HS<xJC+Tbf$xvbK^EQb-Ci=nHB)_vO#I=luTn>DGichZRZ16l;V@G<1t8 z26@l{Lso!PbhVTP$O1JN5)SVad{1`tl*)hR$o2jH^J3&OoBzBdao}@<;_$h1Kk?en z=ka;&bMR$XAbiDUrO&Td(qA=C;dQz+e8HJ;eBp76-)n?x$z{AK+AC$C-!{ykctaus z!|HkX>r3<TMp213ez)UGK6S!3#&^J`zHjvA_DuTHYAODvsTO}LF9~0k<@I@uAXtuh zcu{^x&ER(25(X7pjSTL{qVacEI`NgEnfS_ofALjc|G?EBv*CLqQS>#vZS=LxYJ6Sg zG``+Yf^X2SQ2D<vG@f!2G^NH9+)vsAKiD-2TU9v>n%4(&VaxJ1d~3)SeCzKSeA{dW z{-HM=ZXcS1ZCw@g9oDt<kIKjJkBbkg{NEQkvx5ojCkqL>jugO85+!hVOb>$|Wh@sy zjhw^xhM&gwEm()|`_+VZ%rwH!JPP=^Ym&a-ew5zX5QcYIN;L#83StQcG=l_#83XW3 z^*(qgL0~W(t)(B4EAX!(I`FS0srb?Pv-r^;U*NIn6Y#iu6}{V8MgPXOA3sqipCEW^ z))Ktag%EhoE`q)3diZ_vb_O5f9V-5!NioJSDX#JTO=*jjo1^3#WxM5@6uxuef8yo! AHvj+t delta 62 zcmdlavVwPlGGppSl^KjI_5c6>pZtL%WwJa|1!L;w8B99N$YP<B`MAV*EDZDwbi9nr IO!N)701eg_2LJ#7 diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Kwajalein b/absl/time/internal/cctz/testdata/zoneinfo/Kwajalein index 54bd71ff2dc7d7fc6f3ddb6e3e5ceed4c92b72f5..d6413577f980dfb40e8a187483117f367677eef3 100644 GIT binary patch literal 340 zcmWHE%1kq2zyNGO5fBCeb|40^B^rRl!MCOtPQKzwIPcc@;eVTSfKC~oL;e5%{~4K> z8Ch6a85rg~0IFh`wSj?!fuUys0|x^`-2?`n|Np}s7z7v?Rvcgu@$n5|&^9y#Vgm+k z14{;7Ln9y?)e#{iI16a||2i`X1rQB#9*71x5k!NX31R@93UU|7xgfe8C`4r^bJ+kr JVF&aK7XY8yP&EJm literal 250 zcmWHE%1kq2zyK^j5fBCe7+atL$obzU9iUUP=Rp1c|Nj}8n3)+E<~#rjGtAn+!1Dip zxB~+R1H*~~3_L!*Aq?7vh77ufMnD>2LkJ1>0j>C7XC|QlqCxh8>;c&gqU(V|<k-(; L19XiY&{bRj+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^j5fBCeHXsJEc^ZJk48g?@7FhoLaPk#b!X-hz5B2~5|7T<ZLdO69 zZO#A{F!U?{sji#AzyV?V_=YfO8yYZZ8(4y*!5{>?t*k&v5C#EuAO^8{fEN50dAQ#M zMAw<AZ2{3BSAb}cOF%TpH6R+~B9P{KAe)hi83>tR&g%04Nf6^W1_mx0po8sn4Gp*e DkP%Dx literal 174 zcmWHE%1kq2zyM4@5fBCe7@MO3$f^JT|34!m14Ew=NUCQ61B;Ju2!pnv0f@^GLV{^P YgZ|f<scix2!*42=4bXf$T|)yd06J?KGXMYp 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 zcmbV|KTE?<97S*b)Rq#9L$f;SU@KK5MHh#PUFu{&5fm3iw=Ci!rCSj?C@2M8gnoez z&N?~SLBE0Sf*A$D_)bKG>g0X=-g$XE2={~=`@6IHm5jMzNYM;uzh$=j>iN^d^l|)B zz0qs%7QbIgAB&Tn#2Qz!xgM)qlC^vg*@p!=6Khd6>MA>UjJ@2cyrXt$^!BV(*y%+J zwXJQ-ww$5mCP^@7exuHnT&a1YoOIE*y!2+Qu@b7j8fvOCuliD`+MfCNN%(h}5%Yo} zz8TJbVp4p*8^C5zZa~UG3PMUkibBf5v@i!s6N(d4o*)1sfgl1RBc%}nk&@DgfyjXf bf?tvx+Z|e&Z%gfKp8d;}l*e9qrjq{zz|)A1 literal 216 zcmWHE%1kq2zyQoZ5fBCeCLji}c^iO)m2+GIBh&x?W+p%mL(c*R7BI=-;~T=@9vs5p zoB<>tAOyS7Kn);GU;r`}#OD1E1R@WQo&nKyX1YEgS%_84FuU5ffCTZ{$iTn_vR~KG GfC~UJHYHvF diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kosrae b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kosrae index b6bd4b089416a12b02a37eba8a1082dfa28b7797..11583b13e468c9a33eda602b0afa43699e283ac6 100644 GIT binary patch literal 377 zcmWHE%1kq2zyNGO5fBCeP9O%cMH+y_48f@v7FhoLaPY0^g_Ezi5-thyefZxd9bnd- z?oj{#|9?g%MrI~P7DmSZ|J{9n>KSHjU|?ZjsGGpR!NAb7fPsgBVZ{Lk0f@MdZwQ07 zp&^5|fhCYO0Af_9gkX0ZJJ47V1_3T02C+qecK;W7xMd57t}~M{0ns4Gf@qL~K{UwG zAR6Rw5Dj)bhynBf$S{y6Ky*D&h>?kziG`Vom5B-FlNo0~a+LT7=v*71f9-S)4Y>fx CfM=Qj literal 242 zcmWHE%1kq2zyK^j5fBCe7@Ma7$obzU9bnd-?oj{#|9?g%Mn(pP8D~I>W^DkeTXBGa z1H$(44PnqWGz4OV=^-T81vLJDotcaYhz8jSvIAr<h^_|;k!m-W4bU}qx`u{a0Gwtk AUjP6A 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%1kq2zyNGO5fBCeb|40^B^rRl!MCOtPQKzwIPcc@;eVTSfKC~oL;e5%{~4K> z8Ch6a85rg~0IFh`wSj?!fuUys0|x^`-2?`n|Np}s7z7v?Rvcgu@$n5|&^9y#Vgm+k z14{;7Ln9y?)e#{iI16a||2i`X1rQB#9*71x5k!NX31R@93UU|7xgfe8C`4r^bJ+kr JVF&aK7XY8yP&EJm literal 250 zcmWHE%1kq2zyK^j5fBCe7+atL$obzU9iUUP=Rp1c|Nj}8n3)+E<~#rjGtAn+!1Dip zxB~+R1H*~~3_L!*Aq?7vh77ufMnD>2LkJ1>0j>C7XC|QlqCxh8>;c&gqU(V|<k-(; L19XiY&{bRj+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%1kq2zyPd35fBCe4j=}xMH+y_48f@v7FhoLaPY0^g_Ezi63*MY7yNIN4ygbC z|34!WBQp~t3kw6o0+3RMSsNID?79gc6M7af@Gvl}IKUv_;~T=DZD`1#ZD0wc4S*Qg z{tyz}1GMsgota1jhz7X}M1$N0qCxHh(I7X1Xs|m$44_*<ZmS0}so`EO8=(8`bPbKT E00<sehX4Qo literal 212 zcmWHE%1kq2zyQoZ5fBCe7@Ma7$obzU9Z>)O|9?g%CI*HDAQ6UH8yHv^7*-r$;PCMc rVbC@-1Y($xAtV?NH1&U-nMebO23Z3#yB^3S(kd<+ptW|ohDKZfj`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{|^KpF$N$2iG%2gHr8BRHrj?pcDjZ} FTmWT!7x4f9 delta 61 zcmeBS>S3B-z;k-bevb=I0R@8HEGH(~6ia~k|A7D`#sCB$aS%Px#+r-EM%&QHPS?<g F3jhf!6?*^x 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^OzyQJ^0Aq9f2Lh3Y=W{@GotfDikYqiO&B(+A X(#pUvu}6ZNfq~0L+rZLJ*OChW;%OXk delta 69 zcmdnTxR!B(84CkLoybHh?TO-|#{Yq!&dlr$0}#{$*^G=JNf57Y0t1VWZwQ07fhCB` Nz-0qu+38wx0RRc%60HCL 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%1kq2zyPd35fBCeb|40^1sZ_F48f@v7FhoLaPY0^g_Ezi5-thyeW?Hc|34!W zBQp~t<NyCoSAeP*W^G_#VPL46z`()4(6fMn2O{F*8^WM%Xvm;#U<srRKnkHC1iLfX zfYKlg0zi|%YyqHc|3x0|)B(|TW(sRSG{{*X8ssz(4RRic200N#gPaL6q#np-WMXDw cVP;~2xphhiNQP7wGca)30R3X8YiP&?0HJJIM*si- literal 174 zcmWHE%1kq2zyM4@5fBCe7@MO3$f^JT|34!m1H+UMkkqUV3@kprAq?7vh9E9O2nnVE Y4f<barmzO255K8gHbC?3bPWx;08pJ7fdBvi diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Ponape b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Ponape index d3393a20d85209df94887e0de0c88e08442e4009..090429c09e766d547d4b9b6b583c5593b5028c5f 100644 GIT binary patch literal 325 zcmWHE%1kq2zyPd35fBCeb|40^1sZ_F48f@v7FhoLaPY0^g_Ezi5-thyeW?Hc|34!W zBQp~t<NyCoSAeP*W^G_#VPL46z`()4(6fMn2O{F*8^WM%Xvm;#U<srRKnkHC1iLfX zfYKlg0zi|%YyqHc|3x0|)B(|TW(sRSG{{*X8ssz(4RRic200N#gPaL6q#np-WMXDw cVP;~2xphhiNQP7wGca)30R3X8YiP&?0HJJIM*si- literal 174 zcmWHE%1kq2zyM4@5fBCe7@MO3$f^JT|34!m1H+UMkkqUV3@kprAq?7vh9E9O2nnVE Y4f<barmzO255K8gHbC?3bPWx;08pJ7fdBvi diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Saipan b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Saipan index ffdf8c24b86220d1bc67908fa080a37f250544db..e22424758f8d04d3389b3d361bde0058b02ca6a0 100644 GIT binary patch literal 516 zcmbV|KTE?<97S*b)Rq#9L$f;SU@KK5MHh#PUFu{&5fm3iw=Ci!rCSj?C@2M8gnoez z&N?~SLBE0Sf*A$D_)bKG>g0X=-g$XE2={~=`@6IHm5jMzNYM;uzh$=j>iN^d^l|)B zz0qs%7QbIgAB&Tn#2Qz!xgM)qlC^vg*@p!=6Khd6>MA>UjJ@2cyrXt$^!BV(*y%+J zwXJQ-ww$5mCP^@7exuHnT&a1YoOIE*y!2+Qu@b7j8fvOCuliD`+MfCNN%(h}5%Yo} zz8TJbVp4p*8^C5zZa~UG3PMUkibBf5v@i!s6N(d4o*)1sfgl1RBc%}nk&@DgfyjXf bf?tvx+Z|e&Z%gfKp8d;}l*e9qrjq{zz|)A1 literal 216 zcmWHE%1kq2zyQoZ5fBCeCLji}c^iO)m2+GIBh&x?W+p%mL(c*R7BI=-;~T=@9vs5p zoB<>tAOyS7Kn);GU;r`}#OD1E1R@WQo&nKyX1YEgS%_84FuU5ffCTZ{$iTn_vR~KG GfC~UJHYHvF diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Truk b/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Truk index e79bca2dafa7e914a9baa568edec1b428a2ac63d..8004d65bbe563273c0ca626a4a15e7a65185ce10 100644 GIT binary patch literal 287 zcmWHE%1kq2zyK^j5fBCeHXsJEc^ZJk48g?@7FhoLaPk#b!X-hz5B2~5|7T<ZLdO69 zZO#A{F!U?{sji#AzyV?V_=YfO8yYZZ8(4y*!5{>?t*k&v5C#EuAO^8{fEN50dAQ#M zMAw<AZ2{3BSAb}cOF%TpH6R+~B9P{KAe)hi83>tR&g%04Nf6^W1_mx0po8sn4Gp*e DkP%Dx literal 174 zcmWHE%1kq2zyM4@5fBCe7@MO3$f^JT|34!m14Ew=NUCQ61B;Ju2!pnv0f@^GLV{^P YgZ|f<scix2!*42=4bXf$T|)yd06J?KGXMYp 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^j5fBCeHXsJEc^ZJk48g?@7FhoLaPk#b!X-hz5B2~5|7T<ZLdO69 zZO#A{F!U?{sji#AzyV?V_=YfO8yYZZ8(4y*!5{>?t*k&v5C#EuAO^8{fEN50dAQ#M zMAw<AZ2{3BSAb}cOF%TpH6R+~B9P{KAe)hi83>tR&g%04Nf6^W1_mx0po8sn4Gp*e DkP%Dx literal 174 zcmWHE%1kq2zyM4@5fBCe7@MO3$f^JT|34!m14Ew=NUCQ61B;Ju2!pnv0f@^GLV{^P YgZ|f<scix2!*42=4bXf$T|)yd06J?KGXMYp diff --git a/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab b/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab index 2729e6e8..9a8e4244 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 -- GitLab