Export of internal Abseil changes.

--
636137f6f0de910691a3950387fefacfa4909fb8 by Abseil Team <absl-team@google.com>:

Add move semantics to absl::container_internal::CompressedTuple

PiperOrigin-RevId: 225394165

--
43da91e4f95a196b2e6b76f1c2f4158817b0ebb0 by Greg Falcon <gfalcon@google.com>:

Add a constructor to allow for global absl::Mutex instances.

This adds a new constexpr constructor to absl::Mutex, invoked with the absl::kConstInit tag value, which is intended to be used to construct Mutex instances with static storage duration.

What's tricky about is absl::Mutex (like std::mutex) is not a trivially destructible class, so by the letter of the law, accessing a global Mutex instance after it is destroyed results in undefined behavior.  Despite this, we take care in the destructor to not invalidate the memory layout of the Mutex.  Using a kConstInit-constructed global Mutex after it is destroyed happens to work on the toolchains we use.  Google relies heavily on this behavior internally.

Code sanitizers that detect undefined behavior are able to notice use-after-free of globals, and might complain about this pattern.

PiperOrigin-RevId: 225389447

--
7b553a54bc6460cc7008b028552e66799475ca64 by Abseil Team <absl-team@google.com>:

Internal change.

PiperOrigin-RevId: 225373389

--
fd0c722d217b3b509102274765ccb1a0b596cf46 by Abseil Team <absl-team@google.com>:

Update absl/time/CMakeLists.txt to use new functions
i.e. absl_cc_(library|test)

PiperOrigin-RevId: 225246853

--
9f8f3ba3b67a6d1ac4ecdc529c8b8eb0f02576d9 by Abseil Team <absl-team@google.com>:

Update absl/synchronisation/CMakeLists.txt to use new functions
i.e. absl_cc_(library|test)

PiperOrigin-RevId: 225237980

--
a3fdd67dad2e596f804f5e100c8d3a74d8064faa by Abseil Team <absl-team@google.com>:

Internal cleanup

PiperOrigin-RevId: 225226813

--
48fab23fb8cdca45e95da14fce0de56614d09c25 by Jon Cohen <cohenjon@google.com>:

Use a shim #define for wchar_t in msvc in int128.

On ancient versions of msvc and with some compatibility flags on wchar_t is a typedef for unsigned short, whereas on standards-conforming versions wchar_t is a typedef for __wchar_t.  The first situation causes int128 to not compile as you can't define both `operator wchar_t()` and `operator unsigned short()` because they are the same type.

This CL introduces a wrapper #define in order to abstract over the different typedefs for wchar_t.  We do a define instead of a typedef so that we can #undef at the end and not leak the symbol, since we need it in a header.

https://docs.microsoft.com/en-us/previous-versions/dh8che7s(v=vs.140) has more detail about the underlying problem.

PiperOrigin-RevId: 225223756
GitOrigin-RevId: 636137f6f0de910691a3950387fefacfa4909fb8
Change-Id: Iad94e52e9484c5acec115a2f09ef2d5ec22c2074
This commit is contained in:
Abseil Team 2018-12-13 10:30:03 -08:00 committed by jueminyang
parent 8fbcdb9095
commit 389ec3f906
17 changed files with 486 additions and 205 deletions

View file

@ -14,85 +14,108 @@
# limitations under the License.
#
list(APPEND TIME_PUBLIC_HEADERS
"civil_time.h"
"clock.h"
"time.h"
)
list(APPEND TIME_INTERNAL_HEADERS
"internal/test_util.h"
"internal/cctz/include/cctz/civil_time.h"
"internal/cctz/include/cctz/civil_time_detail.h"
"internal/cctz/include/cctz/time_zone.h"
"internal/cctz/include/cctz/zone_info_source.h"
)
list(APPEND TIME_SRC
absl_cc_library(
NAME
time
HDRS
"civil_time.h"
"clock.h"
"time.h"
SRCS
"civil_time.cc"
"time.cc"
"clock.cc"
"duration.cc"
"format.cc"
"internal/get_current_time_chrono.inc"
"internal/get_current_time_posix.inc"
"time.cc"
COPTS
${ABSL_DEFAULT_COPTS}
DEPS
absl::base
absl::core_headers
absl::int128
absl::strings
absl::civil_time
absl::time_zone
PUBLIC
)
absl_cc_library(
NAME
civil_time
HDRS
"internal/cctz/include/cctz/civil_time.h"
"internal/cctz/include/cctz/civil_time_detail.h"
SRCS
"internal/cctz/src/civil_time_detail.cc"
"internal/cctz/src/time_zone_fixed.cc"
"internal/cctz/src/time_zone_fixed.h"
"internal/cctz/src/time_zone_format.cc"
"internal/cctz/src/time_zone_if.cc"
"internal/cctz/src/time_zone_if.h"
"internal/cctz/src/time_zone_impl.cc"
"internal/cctz/src/time_zone_impl.h"
"internal/cctz/src/time_zone_info.cc"
"internal/cctz/src/time_zone_info.h"
"internal/cctz/src/time_zone_libc.cc"
"internal/cctz/src/time_zone_libc.h"
"internal/cctz/src/time_zone_lookup.cc"
"internal/cctz/src/time_zone_posix.cc"
"internal/cctz/src/time_zone_posix.h"
"internal/cctz/src/tzfile.h"
"internal/cctz/src/zone_info_source.cc"
${TIME_PUBLIC_HEADERS}
${TIME_INTERNAL_HEADERS}
)
set(TIME_PUBLIC_LIBRARIES absl::base absl::stacktrace absl::int128 absl::strings)
absl_library(
TARGET
absl_time
SOURCES
${TIME_SRC}
PUBLIC_LIBRARIES
${TIME_PUBLIC_LIBRARIES}
EXPORT_NAME
time
COPTS
${ABSL_DEFAULT_COPTS}
)
#
## TESTS
#
# test time_test
list(APPEND TIME_TEST_SRC
"civil_time_test.cc"
"time_test.cc"
"clock_test.cc"
"duration_test.cc"
"format_test.cc"
"time_test.cc"
"time_zone_test.cc"
"internal/test_util.cc"
absl_cc_library(
NAME
time_zone
HDRS
"internal/cctz/include/cctz/time_zone.h"
"internal/cctz/include/cctz/zone_info_source.h"
SRCS
"internal/cctz/src/time_zone_fixed.cc"
"internal/cctz/src/time_zone_fixed.h"
"internal/cctz/src/time_zone_format.cc"
"internal/cctz/src/time_zone_if.cc"
"internal/cctz/src/time_zone_if.h"
"internal/cctz/src/time_zone_impl.cc"
"internal/cctz/src/time_zone_impl.h"
"internal/cctz/src/time_zone_info.cc"
"internal/cctz/src/time_zone_info.h"
"internal/cctz/src/time_zone_libc.cc"
"internal/cctz/src/time_zone_libc.h"
"internal/cctz/src/time_zone_lookup.cc"
"internal/cctz/src/time_zone_posix.cc"
"internal/cctz/src/time_zone_posix.h"
"internal/cctz/src/tzfile.h"
"internal/cctz/src/zone_info_source.cc"
COPTS
${ABSL_DEFAULT_COPTS}
)
set(TIME_TEST_PUBLIC_LIBRARIES absl::time)
absl_test(
TARGET
absl_cc_library(
NAME
test_util
HDRS
"internal/test_util.h"
SRCS
"internal/test_util.cc"
"internal/zoneinfo.inc"
COPTS
${ABSL_DEFAULT_COPTS}
DEPS
absl::time
absl::base
absl::time_zone
gmock
TESTONLY
)
absl_cc_test(
NAME
time_test
SOURCES
${TIME_TEST_SRC}
PUBLIC_LIBRARIES
${TIME_TEST_PUBLIC_LIBRARIES}
SRCS
"civil_time_test.cc"
"clock_test.cc"
"duration_test.cc"
"format_test.cc"
"time_test.cc"
"time_zone_test.cc"
COPTS
${ABSL_TEST_COPTS}
DEPS
absl::test_util
absl::time
absl::base
absl::config
absl::core_headers
absl::time_zone
gmock_main
)