Эх сурвалжийг харах

Fix thread local annotatoin and add back type traits is_convertable for MSVC

Feng Xiao 11 жил өмнө
parent
commit
d77877808f

+ 1 - 1
src/google/protobuf/arena.h

@@ -312,7 +312,7 @@ class LIBPROTOBUF_EXPORT Arena {
 
   static const size_t kHeaderSize = sizeof(Block);
   static google::protobuf::internal::SequenceNumber lifecycle_id_generator_;
-  static __thread ThreadCache thread_cache_;
+  static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_;
 
   // SFINAE for skipping addition to delete list for a Type. This is mainly to
   // skip proto2/proto1 message objects with cc_enable_arenas=true from being

+ 6 - 0
src/google/protobuf/stubs/common.h

@@ -314,6 +314,12 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) {
 }
 #endif
 
+#if defined(_MSC_VER)
+#define GOOGLE_THREAD_LOCAL __declspec(thread)
+#else
+#define GOOGLE_THREAD_LOCAL __thread
+#endif
+
 // ===================================================================
 // from google3/base/basictypes.h
 

+ 2 - 2
src/google/protobuf/stubs/type_traits.h

@@ -103,7 +103,7 @@ template <class T> struct remove_reference;
 template <class T> struct add_reference;
 template <class T> struct remove_pointer;
 template <class T, class U> struct is_same;
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
 template <class From, class To> struct is_convertible;
 #endif
 
@@ -322,7 +322,7 @@ template<typename T, typename U> struct is_same : public false_type { };
 template<typename T> struct is_same<T, T> : public true_type { };
 
 // Specified by TR1 [4.6] Relationships between types
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
 namespace type_traits_internal {
 
 // This class is an implementation detail for is_convertible, and you

+ 1 - 1
src/google/protobuf/stubs/type_traits_unittest.cc

@@ -610,7 +610,7 @@ TEST(TypeTraitsTest, TestIsSame) {
 }
 
 TEST(TypeTraitsTest, TestConvertible) {
-#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3)
+#if !(defined(__GNUC__) && __GNUC__ <= 3)
   EXPECT_TRUE((is_convertible<int, int>::value));
   EXPECT_TRUE((is_convertible<int, long>::value));
   EXPECT_TRUE((is_convertible<long, int>::value));