Changes imported from Abseil "staging" branch:

- b76f5d50e1cb55050ef6004d6097dfdf0a806ff5 Fix ABSL_HAVE_THREAD_LOCAL for iOS < 8.0. by Matt Armstrong <marmstrong@google.com>
  - 1dc71788a3f4ef601e03cbea59e36901479cde35 Add missing #include <intrin.h> to use __nop() on MSVC. by Derek Mauro <dmauro@google.com>
  - f63ca6c7e87a7961912995b518b93af41b04bfa1 Fix typo (implict -> implicit) by Abseil Team <absl-team@google.com>
  - 8096006dc52368f166ccd22e25fcee334e142508 Fix a typo. by Abseil Team <absl-team@google.com>
  - c673a4a59790329fab33536caed6733dc03ec2a1 Add missing ":" in TODO. by Abseil Team <absl-team@google.com>
  - 8125d214356501af0f3a8b3bb577eed083f0493f Fix comment nit. by Abseil Team <absl-team@google.com>

GitOrigin-RevId: b76f5d50e1cb55050ef6004d6097dfdf0a806ff5
Change-Id: I0168eb0c92b20ece2fe5ee54573c7720d00fd0b3
This commit is contained in:
Abseil Team 2017-09-29 08:44:28 -07:00 committed by Derek Mauro
parent cdf20caa49
commit 8d8dcb0ae5
9 changed files with 37 additions and 11 deletions

View file

@ -286,6 +286,7 @@ cc_test(
copts = ABSL_TEST_COPTS,
deps = [
":config",
"//absl/synchronization:thread_pool",
"@com_google_googletest//:gtest_main",
],
)

View file

@ -50,7 +50,7 @@ namespace absl {
//
// An `implicit_cast()` may also be used to annotate numeric type conversions
// that, although safe, may produce compiler warnings (such as `long` to `int`).
// Additionally, an `implict_cast()` is also useful within return statements to
// Additionally, an `implicit_cast()` is also useful within return statements to
// indicate a specific implicit conversion is being undertaken.
//
// Example:

View file

@ -56,6 +56,13 @@
#include <cstddef>
#endif // __cplusplus
#if defined(__APPLE__)
// Included for TARGET_OS_IPHONE, __IPHONE_OS_VERSION_MIN_REQUIRED,
// __IPHONE_8_0.
#include <Availability.h>
#include <TargetConditionals.h>
#endif
#include "absl/base/policy_checks.h"
// -----------------------------------------------------------------------------
@ -151,12 +158,13 @@
//
// Checks whether C++11's `thread_local` storage duration specifier is
// supported.
//
// Notes: Clang implements the `thread_local` keyword but Xcode did not support
// the implementation until Xcode 8.
#ifdef ABSL_HAVE_THREAD_LOCAL
#error ABSL_HAVE_THREAD_LOCAL cannot be directly set
#elif !defined(__apple_build_version__) || __apple_build_version__ >= 8000042
#elif !defined(__apple_build_version__) || \
((__apple_build_version__ >= 8000042) && \
!(TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0))
// Notes: Xcode's clang did not support `thread_local` until version
// 8, and even then not for iOS < 8.0.
#define ABSL_HAVE_THREAD_LOCAL 1
#endif

View file

@ -17,12 +17,12 @@
#include <cstdint>
#include "gtest/gtest.h"
#include "absl/synchronization/internal/thread_pool.h"
namespace {
TEST(ConfigTest, Endianness) {
union
{
union {
uint32_t value;
uint8_t data[sizeof(uint32_t)];
} number;
@ -41,4 +41,20 @@ TEST(ConfigTest, Endianness) {
#endif
}
#if defined(ABSL_HAVE_THREAD_LOCAL)
TEST(ConfigTest, ThreadLocal) {
static thread_local int mine_mine_mine = 16;
EXPECT_EQ(16, mine_mine_mine);
{
absl::synchronization_internal::ThreadPool pool(1);
pool.Schedule([&] {
EXPECT_EQ(16, mine_mine_mine);
mine_mine_mine = 32;
EXPECT_EQ(32, mine_mine_mine);
});
}
EXPECT_EQ(16, mine_mine_mine);
}
#endif
} // namespace

View file

@ -46,6 +46,7 @@
// GCC will not tail call given inline volatile assembly.
#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __asm__ __volatile__("")
#elif defined(_MSC_VER)
#include <intrin.h>
// The __nop() intrinsic blocks the optimisation.
#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __nop()
#else