diff options
author | Abseil Team <absl-team@google.com> | 2020-12-22 06:25:57 -0800 |
---|---|---|
committer | Derek Mauro <dmauro@google.com> | 2020-12-22 10:42:56 -0500 |
commit | 4611a601a7ce8d5aad169417092e3d5027aa8403 (patch) | |
tree | 8b1b4d2c97f495d974fd6d0deb74c0b2a26c4798 | |
parent | 8a9ef3c5da2a9064dda0ac3c61b43b87c12c50b8 (diff) |
Export of internal Abseil changes
--
be02479c8f5ddf18f0d711e86648a2a0a9823fb6 by Gennadiy Rozental <rogeeff@google.com>:
Suppress MSVC warning about unused return value
PiperOrigin-RevId: 348624511
--
10e6da15e34d84d314fc1eca1bcdeb96538a04d1 by Derek Mauro <dmauro@google.com>:
Add additional information to README.md
PiperOrigin-RevId: 348562436
--
57283e13d221d9a3f6678a1c6db1a41b4421b938 by Jorg Brown <jorg@google.com>:
Tweaks for better AArch64 support under MSVC
PiperOrigin-RevId: 348518028
--
48cb64ed90c71db6342dcf478a03bbb419b98500 by Christian Blichmann <cblichmann@google.com>:
Internal change
PiperOrigin-RevId: 348480642
GitOrigin-RevId: be02479c8f5ddf18f0d711e86648a2a0a9823fb6
Change-Id: I3614bf846ad1b99e34f507346da1252c6bbc13ba
-rw-r--r-- | README.md | 33 | ||||
-rw-r--r-- | absl/numeric/internal/bits.h | 12 | ||||
-rw-r--r-- | absl/strings/numbers.h | 8 | ||||
-rw-r--r-- | absl/strings/numbers_test.cc | 4 | ||||
-rw-r--r-- | absl/strings/string_view_test.cc | 4 |
5 files changed, 42 insertions, 19 deletions
@@ -9,7 +9,9 @@ standard library. - [About Abseil](#about) - [Quickstart](#quickstart) - [Building Abseil](#build) +- [Support](#support) - [Codemap](#codemap) +- [Releases](#releases) - [License](#license) - [Links](#links) @@ -42,14 +44,22 @@ the Abseil code, running tests, and getting a simple binary working. <a name="build"></a> ## Building Abseil -[Bazel](https://bazel.build) is the official build system for Abseil, -which is supported on most major platforms (Linux, Windows, macOS, for example) -and compilers. See the [quickstart](https://abseil.io/docs/cpp/quickstart) for -more information on building Abseil using the Bazel build system. +[Bazel](https://bazel.build) and [CMake](https://cmake.org/) are the official +build systems for Abseil. -<a name="cmake"></a> -If you require CMake support, please check the -[CMake build instructions](CMake/README.md). +See the [quickstart](https://abseil.io/docs/cpp/quickstart) for more information +on building Abseil using the Bazel build system. + +If you require CMake support, please check the [CMake build +instructions](CMake/README.md) and [CMake +Quickstart](https://abseil.io/docs/cpp/quickstart-cmake). + +## Support + +Abseil is officially supported on many platforms. See the [Abseil +platform support +guide](https://abseil.io/docs/cpp/platforms/platforms) for details on +supported operating systems, compilers, CPUs, etc. ## Codemap @@ -100,6 +110,15 @@ Abseil contains the following C++ library components: * [`utility`](absl/utility/) <br /> The `utility` library contains utility and helper code. +## Releases + +Abseil recommends users "live-at-head" (update to the latest commit from the +master branch as often as possible). However, we realize this philosophy doesn't +work for every project, so we also provide [Long Term Support +Releases](https://github.com/abseil/abseil-cpp/releases) to which we backport +fixes for severe bugs. See our [release +management](https://abseil.io/about/releases) document for more details. + ## License The Abseil C++ library is licensed under the terms of the Apache diff --git a/absl/numeric/internal/bits.h b/absl/numeric/internal/bits.h index 50828156..af45700f 100644 --- a/absl/numeric/internal/bits.h +++ b/absl/numeric/internal/bits.h @@ -23,12 +23,6 @@ // windows intrinsic functions. #if defined(_MSC_VER) && !defined(__clang__) #include <intrin.h> -#if defined(_M_X64) -#pragma intrinsic(_BitScanReverse64) -#pragma intrinsic(_BitScanForward64) -#endif -#pragma intrinsic(_BitScanReverse) -#pragma intrinsic(_BitScanForward) #endif #include "absl/base/attributes.h" @@ -185,7 +179,8 @@ CountLeadingZeroes64(uint64_t x) { // Handle 0 as a special case because __builtin_clzll(0) is undefined. return x == 0 ? 64 : __builtin_clzll(x); -#elif defined(_MSC_VER) && !defined(__clang__) && defined(_M_X64) +#elif defined(_MSC_VER) && !defined(__clang__) && \ + (defined(_M_X64) || defined(_M_ARM64)) // MSVC does not have __buitin_clzll. Use _BitScanReverse64. unsigned long result = 0; // NOLINT(runtime/int) if (_BitScanReverse64(&result, x)) { @@ -271,7 +266,8 @@ CountTrailingZeroesNonzero64(uint64_t x) { static_assert(sizeof(unsigned long long) == sizeof(x), // NOLINT(runtime/int) "__builtin_ctzll does not take 64-bit arg"); return __builtin_ctzll(x); -#elif defined(_MSC_VER) && !defined(__clang__) && defined(_M_X64) +#elif defined(_MSC_VER) && !defined(__clang__) && \ + (defined(_M_X64) || defined(_M_ARM64)) unsigned long result = 0; // NOLINT(runtime/int) _BitScanForward64(&result, x); return result; diff --git a/absl/strings/numbers.h b/absl/strings/numbers.h index ffc738fa..7966e250 100644 --- a/absl/strings/numbers.h +++ b/absl/strings/numbers.h @@ -1,3 +1,4 @@ +// // Copyright 2017 The Abseil Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -244,6 +245,13 @@ inline size_t FastHexToBufferZeroPad16(uint64_t val, char* out) { } // namespace numbers_internal +// SimpleAtoi() +// +// Converts a string to an integer, using `safe_strto?()` functions for actual +// parsing, returning `true` if successful. The `safe_strto?()` functions apply +// strict checking; the string must be a base-10 integer, optionally followed or +// preceded by ASCII whitespace, with a value in the range of the corresponding +// integer type. template <typename int_type> ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view str, int_type* out) { return numbers_internal::safe_strtoi_base(str, out, 10); diff --git a/absl/strings/numbers_test.cc b/absl/strings/numbers_test.cc index 27616bf8..4ab67fb6 100644 --- a/absl/strings/numbers_test.cc +++ b/absl/strings/numbers_test.cc @@ -46,7 +46,6 @@ namespace { -using absl::SimpleAtoi; using absl::numbers_internal::kSixDigitsToBufferSize; using absl::numbers_internal::safe_strto32_base; using absl::numbers_internal::safe_strto64_base; @@ -56,6 +55,7 @@ using absl::numbers_internal::SixDigitsToBuffer; using absl::strings_internal::Itoa; using absl::strings_internal::strtouint32_test_cases; using absl::strings_internal::strtouint64_test_cases; +using absl::SimpleAtoi; using testing::Eq; using testing::MatchesRegex; @@ -380,7 +380,7 @@ TEST(NumbersTest, Atoi) { VerifySimpleAtoiGood<uint32_t>(42, 42); VerifySimpleAtoiGood<unsigned int>(42, 42); VerifySimpleAtoiGood<int64_t>(-42, -42); - VerifySimpleAtoiGood<long>(-42, -42); // NOLINT: runtime-int + VerifySimpleAtoiGood<long>(-42, -42); // NOLINT(runtime/int) VerifySimpleAtoiGood<uint64_t>(42, 42); VerifySimpleAtoiGood<size_t>(42, 42); VerifySimpleAtoiGood<std::string::size_type>(42, 42); diff --git a/absl/strings/string_view_test.cc b/absl/strings/string_view_test.cc index dcebb150..643af8f8 100644 --- a/absl/strings/string_view_test.cc +++ b/absl/strings/string_view_test.cc @@ -915,9 +915,9 @@ TEST(StringViewTest, At) { EXPECT_EQ(abc.at(1), 'b'); EXPECT_EQ(abc.at(2), 'c'); #ifdef ABSL_HAVE_EXCEPTIONS - EXPECT_THROW(abc.at(3), std::out_of_range); + EXPECT_THROW((void)abc.at(3), std::out_of_range); #else - ABSL_EXPECT_DEATH_IF_SUPPORTED(abc.at(3), "absl::string_view::at"); + ABSL_EXPECT_DEATH_IF_SUPPORTED((void)abc.at(3), "absl::string_view::at"); #endif } |