From 93dfcf74cb5fccae3da07897d8613ae6cab958a0 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Mon, 1 Apr 2019 14:06:28 -0700 Subject: Export of internal Abseil changes. -- 855576faf9556573fd74c2874b290d8feb6565d5 by Gennadiy Rozental : Import of CCTZ from GitHub. PiperOrigin-RevId: 241395451 -- b93bfd43eb2a992258f131e10f503526cfec6d48 by CJ Johnson : Fixes comment over AbslHashValue for InlinedVector PiperOrigin-RevId: 241368320 -- 75f58dafcac7d78c28d92a61ec7e53c5b3b86697 by Matt Kulukundis : Do not call sampling logic for tables with custom allocators. PiperOrigin-RevId: 241356451 -- 09f1b4889476ff707a54189aff540e2fe1edcf61 by Derek Mauro : Re-enable optionalTest.InPlaceTSFINAEBug after libc++ update PiperOrigin-RevId: 241222673 -- 01a8bb5a8cb1e13e88ddb92f9c0160beb6e126be by Derek Mauro : Update Clang on Kokoro to r356196. This includes a workaround for a -Wgnu-include-next warning fixed by https://reviews.llvm.org/rG0706e144d57305782988dd4367530ae04986116f PiperOrigin-RevId: 241222395 -- 1de66bb669a7ec1494d6064677687f761ee2d369 by Abseil Team : Remove identical test and fix char to string per comment PiperOrigin-RevId: 240855512 GitOrigin-RevId: 855576faf9556573fd74c2874b290d8feb6565d5 Change-Id: Ie155b209ef5567e6597da6ef1844db7e2ad72586 --- absl/container/inlined_vector.h | 6 +-- absl/container/internal/raw_hash_set.h | 13 ++++++- absl/container/internal/raw_hash_set_test.cc | 41 ++++++++++++++++++++- absl/copts/GENERATED_AbseilCopts.cmake | 4 +- absl/copts/GENERATED_copts.bzl | 4 +- absl/copts/copts.py | 2 + absl/strings/str_split_test.cc | 19 ++-------- absl/time/internal/cctz/src/time_zone_lookup.cc | 33 ++++++++++------- absl/time/internal/cctz/src/tzfile.h | 3 ++ absl/time/internal/cctz/testdata/version | 2 +- .../cctz/testdata/zoneinfo/America/Metlakatla | Bin 1409 -> 1423 bytes .../time/internal/cctz/testdata/zoneinfo/Asia/Gaza | Bin 2286 -> 2343 bytes .../internal/cctz/testdata/zoneinfo/Asia/Hebron | Bin 2314 -> 2371 bytes .../internal/cctz/testdata/zoneinfo/Asia/Jerusalem | Bin 2256 -> 2312 bytes .../internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv | Bin 2256 -> 2312 bytes absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT | Bin 118 -> 118 bytes absl/time/internal/cctz/testdata/zoneinfo/Israel | Bin 2256 -> 2312 bytes absl/time/internal/cctz/testdata/zoneinfo/UCT | Bin 118 -> 118 bytes .../internal/cctz/testdata/zoneinfo/iso3166.tab | 6 +-- absl/types/optional_test.cc | 2 - ci/linux_clang-latest_libcxx_bazel.sh | 2 +- ci/linux_clang-latest_libstdcxx_bazel.sh | 2 +- 22 files changed, 96 insertions(+), 43 deletions(-) diff --git a/absl/container/inlined_vector.h b/absl/container/inlined_vector.h index 0f066860..9b699b57 100644 --- a/absl/container/inlined_vector.h +++ b/absl/container/inlined_vector.h @@ -1303,10 +1303,10 @@ bool operator>=(const absl::InlinedVector& a, return !(a < b); } -// AbslHashValue() +// `AbslHashValue()` // -// Provides `absl::Hash` support for inlined vectors. You do not normally call -// this function directly. +// Provides `absl::Hash` support for `absl::InlinedVector`. You do not normally +// call this function directly. template H AbslHashValue(H h, const absl::InlinedVector& a) { auto a_data = a.data(); diff --git a/absl/container/internal/raw_hash_set.h b/absl/container/internal/raw_hash_set.h index 85e33344..9c926812 100644 --- a/absl/container/internal/raw_hash_set.h +++ b/absl/container/internal/raw_hash_set.h @@ -1437,7 +1437,18 @@ class raw_hash_set { void initialize_slots() { assert(capacity_); - if (slots_ == nullptr) { + // Folks with custom allocators often make unwaranted assumptions about the + // behavior of their classes vis-a-vis trivial destructability and what + // calls they will or wont make. Avoid sampling for people with custom + // allocators to get us out of this mess. This is not a hard guarntee but a + // workaround while we plan the exact guarantee we want to provide. + // + // People are often sloppy with the exact type of their allocator (sometimes + // it has an extra const or is missing the pair, but rebinds made it work + // anyway). To avoid the ambiguitity, we work off SlotAlloc which we have + // bound more carefully. + if (std::is_same>::value && + slots_ == nullptr) { infoz_ = Sample(); } diff --git a/absl/container/internal/raw_hash_set_test.cc b/absl/container/internal/raw_hash_set_test.cc index 7d96ed90..871d85f1 100644 --- a/absl/container/internal/raw_hash_set_test.cc +++ b/absl/container/internal/raw_hash_set_test.cc @@ -343,7 +343,25 @@ struct IntTable : raw_hash_set, std::equal_to, std::allocator> { using Base = typename IntTable::raw_hash_set; - IntTable() {} + using Base::Base; +}; + +template +struct CustomAlloc : std::allocator { + CustomAlloc() {} + + template + CustomAlloc(const CustomAlloc& other) {} + + template struct rebind { + using other = CustomAlloc; + }; +}; + +struct CustomAllocIntTable + : raw_hash_set, + std::equal_to, CustomAlloc> { + using Base = typename CustomAllocIntTable::raw_hash_set; using Base::Base; }; @@ -1869,6 +1887,27 @@ TEST(RawHashSamplerTest, Sample) { 0.01, 0.005); } +TEST(RawHashSamplerTest, DoNotSampleCustomAllocators) { + // Enable the feature even if the prod default is off. + SetHashtablezEnabled(true); + SetHashtablezSampleParameter(100); + + auto& sampler = HashtablezSampler::Global(); + size_t start_size = 0; + start_size += sampler.Iterate([&](const HashtablezInfo&) { ++start_size; }); + + std::vector tables; + for (int i = 0; i < 1000000; ++i) { + tables.emplace_back(); + tables.back().insert(1); + } + size_t end_size = 0; + end_size += sampler.Iterate([&](const HashtablezInfo&) { ++end_size; }); + + EXPECT_NEAR((end_size - start_size) / static_cast(tables.size()), + 0.00, 0.001); +} + #ifdef ADDRESS_SANITIZER TEST(Sanitizer, PoisoningUnused) { IntTable t; diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake index 043c88a2..16cf9fea 100644 --- a/absl/copts/GENERATED_AbseilCopts.cmake +++ b/absl/copts/GENERATED_AbseilCopts.cmake @@ -76,6 +76,7 @@ list(APPEND ABSL_CLANG_CL_TEST_FLAGS "-Wno-unused-template" "-Wno-used-but-marked-unused" "-Wno-zero-as-null-pointer-constant" + "-Wno-gnu-include-next" "-Wno-gnu-zero-variadic-macro-arguments" ) @@ -177,6 +178,7 @@ list(APPEND ABSL_LLVM_TEST_FLAGS "-Wno-unused-template" "-Wno-used-but-marked-unused" "-Wno-zero-as-null-pointer-constant" + "-Wno-gnu-include-next" "-Wno-gnu-zero-variadic-macro-arguments" ) @@ -202,7 +204,7 @@ list(APPEND ABSL_MSVC_FLAGS ) list(APPEND ABSL_MSVC_LINKOPTS - "-ignore:4221" + "/ignore:4221" ) list(APPEND ABSL_MSVC_TEST_FLAGS diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl index d40380b8..0669c724 100644 --- a/absl/copts/GENERATED_copts.bzl +++ b/absl/copts/GENERATED_copts.bzl @@ -77,6 +77,7 @@ ABSL_CLANG_CL_TEST_FLAGS = [ "-Wno-unused-template", "-Wno-used-but-marked-unused", "-Wno-zero-as-null-pointer-constant", + "-Wno-gnu-include-next", "-Wno-gnu-zero-variadic-macro-arguments", ] @@ -178,6 +179,7 @@ ABSL_LLVM_TEST_FLAGS = [ "-Wno-unused-template", "-Wno-used-but-marked-unused", "-Wno-zero-as-null-pointer-constant", + "-Wno-gnu-include-next", "-Wno-gnu-zero-variadic-macro-arguments", ] @@ -203,7 +205,7 @@ ABSL_MSVC_FLAGS = [ ] ABSL_MSVC_LINKOPTS = [ - "-ignore:4221", + "/ignore:4221", ] ABSL_MSVC_TEST_FLAGS = [ diff --git a/absl/copts/copts.py b/absl/copts/copts.py index 608d7c0e..cd568906 100644 --- a/absl/copts/copts.py +++ b/absl/copts/copts.py @@ -103,6 +103,8 @@ LLVM_TEST_DISABLE_WARNINGS_FLAGS = [ "-Wno-unused-template", "-Wno-used-but-marked-unused", "-Wno-zero-as-null-pointer-constant", + # For a libc++ bug fixed in r357267 + "-Wno-gnu-include-next", # gtest depends on this GNU extension being offered. "-Wno-gnu-zero-variadic-macro-arguments", ] diff --git a/absl/strings/str_split_test.cc b/absl/strings/str_split_test.cc index 4b8e7d6b..02f27bc4 100644 --- a/absl/strings/str_split_test.cc +++ b/absl/strings/str_split_test.cc @@ -71,8 +71,8 @@ TEST(Split, TraitsTest) { // namespaces just like callers will need to use. TEST(Split, APIExamples) { { - // Passes std::string delimiter. Assumes the default of Literal. - std::vector v = absl::StrSplit("a,b,c", ','); + // Passes std::string delimiter. Assumes the default of ByString. + std::vector v = absl::StrSplit("a,b,c", ","); // NOLINT EXPECT_THAT(v, ElementsAre("a", "b", "c")); // Equivalent to... @@ -96,17 +96,6 @@ TEST(Split, APIExamples) { EXPECT_THAT(v, ElementsAre("a", "b", "c")); } - { - // Same as above, but using std::string - std::vector v = absl::StrSplit("a,b,c", ','); - EXPECT_THAT(v, ElementsAre("a", "b", "c")); - - // Equivalent to... - using absl::ByChar; - v = absl::StrSplit("a,b,c", ByChar(',')); - EXPECT_THAT(v, ElementsAre("a", "b", "c")); - } - { // Uses the Literal std::string "=>" as the delimiter. const std::vector v = absl::StrSplit("a=>b=>c", "=>"); @@ -797,7 +786,7 @@ static bool IsFoundAt(absl::string_view text, Delimiter d, int expected_pos) { } // -// Tests for Literal +// Tests for ByString // // Tests using any delimiter that represents a single comma. @@ -817,7 +806,7 @@ void TestComma(Delimiter d) { EXPECT_FALSE(IsFoundAt(";", d, -1)); } -TEST(Delimiter, Literal) { +TEST(Delimiter, ByString) { using absl::ByString; TestComma(ByString(",")); diff --git a/absl/time/internal/cctz/src/time_zone_lookup.cc b/absl/time/internal/cctz/src/time_zone_lookup.cc index fd04e2df..a27bfc13 100644 --- a/absl/time/internal/cctz/src/time_zone_lookup.cc +++ b/absl/time/internal/cctz/src/time_zone_lookup.cc @@ -23,6 +23,7 @@ #if defined(__APPLE__) #include +#include #endif #include @@ -121,24 +122,32 @@ time_zone fixed_time_zone(const seconds& offset) { time_zone local_time_zone() { const char* zone = ":localtime"; +#if defined(__ANDROID__) + char sysprop[PROP_VALUE_MAX]; + if (__system_property_get("persist.sys.timezone", sysprop) > 0) { + zone = sysprop; + } +#endif +#if defined(__APPLE__) + std::vector buffer; + CFTimeZoneRef tz_default = CFTimeZoneCopyDefault(); + if (CFStringRef tz_name = CFTimeZoneGetName(tz_default)) { + CFStringEncoding encoding = kCFStringEncodingUTF8; + CFIndex length = CFStringGetLength(tz_name); + buffer.resize(CFStringGetMaximumSizeForEncoding(length, encoding) + 1); + if (CFStringGetCString(tz_name, &buffer[0], buffer.size(), encoding)) { + zone = &buffer[0]; + } + } + CFRelease(tz_default); +#endif // Allow ${TZ} to override to default zone. char* tz_env = nullptr; #if defined(_MSC_VER) _dupenv_s(&tz_env, nullptr, "TZ"); -#elif defined(__APPLE__) - CFTimeZoneRef system_time_zone = CFTimeZoneCopyDefault(); - CFStringRef tz_name = CFTimeZoneGetName(system_time_zone); - tz_env = strdup(CFStringGetCStringPtr(tz_name, CFStringGetSystemEncoding())); - CFRelease(system_time_zone); #else tz_env = std::getenv("TZ"); -#endif -#if defined(__ANDROID__) - char sysprop[PROP_VALUE_MAX]; - if (tz_env == nullptr) - if (__system_property_get("persist.sys.timezone", sysprop) > 0) - tz_env = sysprop; #endif if (tz_env) zone = tz_env; @@ -163,8 +172,6 @@ time_zone local_time_zone() { #if defined(_MSC_VER) free(localtime_env); free(tz_env); -#elif defined(__APPLE__) - free(tz_env); #endif time_zone tz; diff --git a/absl/time/internal/cctz/src/tzfile.h b/absl/time/internal/cctz/src/tzfile.h index 4485ba55..ef3feff0 100644 --- a/absl/time/internal/cctz/src/tzfile.h +++ b/absl/time/internal/cctz/src/tzfile.h @@ -33,6 +33,9 @@ #define TZDEFRULES "posixrules" #endif /* !defined TZDEFRULES */ + +/* See Internet RFC 8536 for more details about the following format. */ + /* ** Each file begins with. . . */ diff --git a/absl/time/internal/cctz/testdata/version b/absl/time/internal/cctz/testdata/version index 63f58006..149d790c 100644 --- a/absl/time/internal/cctz/testdata/version +++ b/absl/time/internal/cctz/testdata/version @@ -1 +1 @@ -2018i +2019a diff --git a/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla b/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla index 85a7e16e..1e94be3d 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla and b/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza index cf54deb8..32b4ed65 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza and b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron index 09c876a6..0ed8b0d4 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron and b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem index 2d14c999..93e9f19c 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem and b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv index 2d14c999..93e9f19c 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv and b/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT b/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT index a88c4b66..5583f5b0 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT and b/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/Israel b/absl/time/internal/cctz/testdata/zoneinfo/Israel index 2d14c999..93e9f19c 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/Israel and b/absl/time/internal/cctz/testdata/zoneinfo/Israel differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/UCT b/absl/time/internal/cctz/testdata/zoneinfo/UCT index a88c4b66..5583f5b0 100644 Binary files a/absl/time/internal/cctz/testdata/zoneinfo/UCT and b/absl/time/internal/cctz/testdata/zoneinfo/UCT differ diff --git a/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab b/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab index 4e4a5c3d..a4ff61a4 100644 --- a/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +++ b/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab @@ -9,7 +9,7 @@ # All text uses UTF-8 encoding. The columns of the table are as follows: # # 1. ISO 3166-1 alpha-2 country code, current as of -# ISO 3166-1 N905 (2016-11-15). See: Updates on ISO 3166-1 +# ISO 3166-1 N976 (2018-11-06). See: Updates on ISO 3166-1 # https://isotc.iso.org/livelink/livelink/Open/16944257 # 2. The usual English name for the coded region, # chosen so that alphabetic sorting of subsets produces helpful lists. @@ -166,7 +166,7 @@ ME Montenegro MF St Martin (French) MG Madagascar MH Marshall Islands -MK Macedonia +MK North Macedonia ML Mali MM Myanmar (Burma) MN Mongolia @@ -235,7 +235,7 @@ ST Sao Tome & Principe SV El Salvador SX St Maarten (Dutch) SY Syria -SZ Swaziland +SZ Eswatini (Swaziland) TC Turks & Caicos Is TD Chad TF French Southern & Antarctic Lands diff --git a/absl/types/optional_test.cc b/absl/types/optional_test.cc index 897c183a..221c3145 100644 --- a/absl/types/optional_test.cc +++ b/absl/types/optional_test.cc @@ -1628,7 +1628,6 @@ TEST(optionalTest, AssignmentConstraints) { EXPECT_TRUE(absl::is_copy_assignable>::value); } -#if !defined(ABSL_HAVE_STD_OPTIONAL) && !defined(_LIBCPP_VERSION) struct NestedClassBug { struct Inner { bool dummy = false; @@ -1651,6 +1650,5 @@ TEST(optionalTest, InPlaceTSFINAEBug) { o.emplace(); EXPECT_TRUE(o.has_value()); } -#endif // !defined(ABSL_HAVE_STD_OPTIONAL) && !defined(_LIBCPP_VERSION) } // namespace diff --git a/ci/linux_clang-latest_libcxx_bazel.sh b/ci/linux_clang-latest_libcxx_bazel.sh index eec6c26f..fe9d6aaf 100755 --- a/ci/linux_clang-latest_libcxx_bazel.sh +++ b/ci/linux_clang-latest_libcxx_bazel.sh @@ -32,7 +32,7 @@ if [ -z ${COMPILATION_MODE:-} ]; then COMPILATION_MODE="fastbuild opt" fi -readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190313" +readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190329" # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. diff --git a/ci/linux_clang-latest_libstdcxx_bazel.sh b/ci/linux_clang-latest_libstdcxx_bazel.sh index 14723235..611b7f24 100755 --- a/ci/linux_clang-latest_libstdcxx_bazel.sh +++ b/ci/linux_clang-latest_libstdcxx_bazel.sh @@ -32,7 +32,7 @@ if [ -z ${COMPILATION_MODE:-} ]; then COMPILATION_MODE="fastbuild opt" fi -readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190313" +readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190329" # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. -- cgit v1.2.3