Export of internal Abseil changes
-- 09c1e7877210fe85c43631538303af801c233e89 by Gennadiy Rozental <rogeeff@google.com>: Change CordRep::length to size_t to be compatible with ChunkIterator. PiperOrigin-RevId: 297901255 -- 226d5e79fb4e20fb09d75f034624d5be770f4ece by Derek Mauro <dmauro@google.com>: Makes absl::string_view::substr constexpr for std::string_view compatibility Fixes #627 PiperOrigin-RevId: 297872778 -- 851aa24a22d0ba5552098bf7e5735c95e4a8d4f7 by Abseil Team <absl-team@google.com>: Reformat one line. PiperOrigin-RevId: 297839574 -- 4f449c462583797455375fa6f1365a6b2cfa7e0a by Benjamin Barenblat <bbaren@google.com>: Internal change PiperOrigin-RevId: 297677173 -- 2d41a250e9a8f272946bc3262463e4025d88fba3 by Abseil Team <absl-team@google.com>: Internal change PiperOrigin-RevId: 297537076 -- 6e7fbe1e90999a58556d41955bef44033c61876c by Gennadiy Rozental <rogeeff@google.com>: Internal change PiperOrigin-RevId: 297376994 -- 5acf79338191b31cec158b06cd96ca8dfa3e81fe by Derek Mauro <dmauro@google.com>: Add a debug-mode bounds-check on absl::Span::operator[]. PiperOrigin-RevId: 297355826 -- 1c540d06a56c7e92bb07b90f16b4e00b014ef18f by CJ Johnson <johnsoncj@google.com>: Adding new LTS to the list PiperOrigin-RevId: 297235265 -- 696ce48bea6927436ff89f59b887e5869b1b0f38 by Derek Mauro <dmauro@google.com>: Fix build on FreeBSD/powerpc (implement UnscaledCycleClock) Merges/Fixes GitHub #616 PiperOrigin-RevId: 297188640 GitOrigin-RevId: 09c1e7877210fe85c43631538303af801c233e89 Change-Id: I5d97b16bb6378792d2fcf7d29080cca18aa7729a
This commit is contained in:
parent
0033c9ea91
commit
bcefbdcdf6
11 changed files with 62 additions and 32 deletions
|
@ -1,15 +1,26 @@
|
|||
cmake_minimum_required(VERSION 2.8.2)
|
||||
|
||||
project(googletest-download NONE)
|
||||
project(googletest-external NONE)
|
||||
|
||||
include(ExternalProject)
|
||||
if(${ABSL_USE_GOOGLETEST_HEAD})
|
||||
ExternalProject_Add(googletest
|
||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
GIT_TAG master
|
||||
SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
|
||||
BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
|
||||
SOURCE_DIR "${absl_gtest_src_dir}"
|
||||
BINARY_DIR "${absl_gtest_build_dir}"
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
||||
else()
|
||||
ExternalProject_Add(googletest
|
||||
SOURCE_DIR "${absl_gtest_src_dir}"
|
||||
BINARY_DIR "${absl_gtest_build_dir}"
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
||||
endif()
|
|
@ -1,10 +1,11 @@
|
|||
# Downloads and unpacks googletest at configure time. Based on the instructions
|
||||
# at https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project
|
||||
# Integrates googletest at configure time. Based on the instructions at
|
||||
# https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project
|
||||
|
||||
# Download the latest googletest from Github master
|
||||
# Set up the external googletest project, downloading the latest from Github
|
||||
# master if requested.
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in
|
||||
${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt
|
||||
${CMAKE_BINARY_DIR}/googletest-external/CMakeLists.txt
|
||||
)
|
||||
|
||||
set(ABSL_SAVE_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
|
@ -14,17 +15,17 @@ if (BUILD_SHARED_LIBS)
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_CREATE_SHARED_LIBRARY=1")
|
||||
endif()
|
||||
|
||||
# Configure and build the downloaded googletest source
|
||||
# Configure and build the googletest source.
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download )
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-external )
|
||||
if(result)
|
||||
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} --build .
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-external)
|
||||
if(result)
|
||||
message(FATAL_ERROR "Build step for googletest failed: ${result}")
|
||||
endif()
|
||||
|
|
|
@ -84,6 +84,10 @@ find_package(Threads REQUIRED)
|
|||
option(ABSL_USE_GOOGLETEST_HEAD
|
||||
"If ON, abseil will download HEAD from googletest at config time." OFF)
|
||||
|
||||
set(ABSL_LOCAL_GOOGLETEST_DIR "/usr/src/googletest" CACHE PATH
|
||||
"If ABSL_USE_GOOGLETEST_HEAD is OFF, specifies the directory of a local googletest checkout."
|
||||
)
|
||||
|
||||
option(ABSL_RUN_TESTS "If ON, Abseil tests will be run." OFF)
|
||||
|
||||
if(${ABSL_RUN_TESTS})
|
||||
|
@ -96,11 +100,13 @@ endif()
|
|||
## check targets
|
||||
if(BUILD_TESTING)
|
||||
|
||||
if(${ABSL_USE_GOOGLETEST_HEAD})
|
||||
include(CMake/Googletest/DownloadGTest.cmake)
|
||||
set(absl_gtest_src_dir ${CMAKE_BINARY_DIR}/googletest-src)
|
||||
set(absl_gtest_build_dir ${CMAKE_BINARY_DIR}/googletest-build)
|
||||
if(${ABSL_USE_GOOGLETEST_HEAD})
|
||||
set(absl_gtest_src_dir ${CMAKE_BINARY_DIR}/googletest-src)
|
||||
else()
|
||||
set(absl_gtest_src_dir ${ABSL_LOCAL_GOOGLETEST_DIR})
|
||||
endif()
|
||||
include(CMake/Googletest/DownloadGTest.cmake)
|
||||
|
||||
check_target(gtest)
|
||||
check_target(gtest_main)
|
||||
|
|
1
LTS.md
1
LTS.md
|
@ -13,3 +13,4 @@ The following lists LTS branches and the dates on which they have been released:
|
|||
* [LTS Branch December 18, 2018](https://github.com/abseil/abseil-cpp/tree/lts_2018_12_18/)
|
||||
* [LTS Branch June 20, 2018](https://github.com/abseil/abseil-cpp/tree/lts_2018_06_20/)
|
||||
* [LTS Branch August 8, 2019](https://github.com/abseil/abseil-cpp/tree/lts_2019_08_08/)
|
||||
* [LTS Branch February 25, 2020](https://github.com/abseil/abseil-cpp/tree/lts_2020_02_25/)
|
||||
|
|
|
@ -136,8 +136,6 @@ inline const CordRepExternal* CordRep::external() const {
|
|||
|
||||
static const size_t kFlatOverhead = offsetof(CordRep, data);
|
||||
|
||||
static_assert(kFlatOverhead == 13, "Unittests assume kFlatOverhead == 13");
|
||||
|
||||
// Largest and smallest flat node lengths we are willing to allocate
|
||||
// Flat allocation size is stored in tag, which currently can encode sizes up
|
||||
// to 4K, encoded as multiple of either 8 or 32 bytes.
|
||||
|
|
|
@ -86,8 +86,7 @@ struct CordRepExternal;
|
|||
struct CordRep {
|
||||
// The following three fields have to be less than 32 bytes since
|
||||
// that is the smallest supported flat node size.
|
||||
// We use uint64_t for the length even in 32-bit binaries.
|
||||
uint64_t length;
|
||||
size_t length;
|
||||
Refcount refcount;
|
||||
// If tag < FLAT, it represents CordRepKind and indicates the type of node.
|
||||
// Otherwise, the node type is CordRepFlat and the tag is the encoded size.
|
||||
|
|
|
@ -382,11 +382,12 @@ class string_view {
|
|||
// Returns a "substring" of the `string_view` (at offset `pos` and length
|
||||
// `n`) as another string_view. This function throws `std::out_of_bounds` if
|
||||
// `pos > size`.
|
||||
string_view substr(size_type pos, size_type n = npos) const {
|
||||
if (ABSL_PREDICT_FALSE(pos > length_))
|
||||
base_internal::ThrowStdOutOfRange("absl::string_view::substr");
|
||||
n = (std::min)(n, length_ - pos);
|
||||
return string_view(ptr_ + pos, n);
|
||||
constexpr string_view substr(size_type pos, size_type n = npos) const {
|
||||
return ABSL_PREDICT_FALSE(pos > length_)
|
||||
? (base_internal::ThrowStdOutOfRange(
|
||||
"absl::string_view::substr"),
|
||||
string_view())
|
||||
: string_view(ptr_ + pos, Min(n, length_ - pos));
|
||||
}
|
||||
|
||||
// string_view::compare()
|
||||
|
|
|
@ -1086,6 +1086,14 @@ TEST(StringViewTest, ConstexprCompiles) {
|
|||
EXPECT_EQ(sp_npos, -1);
|
||||
}
|
||||
|
||||
TEST(StringViewTest, ConstexprSubstr) {
|
||||
constexpr absl::string_view foobar("foobar", 6);
|
||||
constexpr absl::string_view foo = foobar.substr(0, 3);
|
||||
constexpr absl::string_view bar = foobar.substr(3);
|
||||
EXPECT_EQ(foo, "foo");
|
||||
EXPECT_EQ(bar, "bar");
|
||||
}
|
||||
|
||||
TEST(StringViewTest, Noexcept) {
|
||||
EXPECT_TRUE((std::is_nothrow_constructible<absl::string_view,
|
||||
const std::string&>::value));
|
||||
|
|
|
@ -276,7 +276,7 @@ class Span {
|
|||
// Returns a reference to the i'th element of this span.
|
||||
constexpr reference operator[](size_type i) const noexcept {
|
||||
// MSVC 2015 accepts this as constexpr, but not ptr_[i]
|
||||
return *(data() + i);
|
||||
return ABSL_ASSERT(i < size()), *(data() + i);
|
||||
}
|
||||
|
||||
// Span::at()
|
||||
|
|
|
@ -232,6 +232,11 @@ TEST(IntSpan, ElementAccess) {
|
|||
|
||||
EXPECT_EQ(s.front(), s[0]);
|
||||
EXPECT_EQ(s.back(), s[9]);
|
||||
|
||||
#ifndef NDEBUG
|
||||
EXPECT_DEATH_IF_SUPPORTED(s[-1], "");
|
||||
EXPECT_DEATH_IF_SUPPORTED(s[10], "");
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(IntSpan, AtThrows) {
|
||||
|
|
Loading…
Reference in a new issue