OLD | NEW |
| (Empty) |
1 diff --git a/third_party/protobuf/README.chromium b/third_party/protobuf/README.
chromium | |
2 index 0375fd1..da9f26f 100644 | |
3 --- a/third_party/protobuf/README.chromium | |
4 +++ b/third_party/protobuf/README.chromium | |
5 @@ -19,6 +19,9 @@ Steps used to create the current version: | |
6 will need to modify the README to include the correct revision, and modif
y | |
7 the buildfiles to reflect the actual files in the source tree, what they | |
8 #include, what warnings they trigger, etc. | |
9 + 01: Miscellaneous build fixes to make the upstream sources compile. At this | |
10 + point you should be able to build the protobuf_* and protoc targets (but | |
11 + not necessarily anything depending on them). | |
12 (3) Generate descriptor_pb2.py using something like the following steps. Make | |
13 sure you've regenerated your buildfiles and will build protoc from the | |
14 newly-modified sources above. | |
15 diff --git a/third_party/protobuf/src/google/protobuf/arena.cc b/third_party/pro
tobuf/src/google/protobuf/arena.cc | |
16 index ed1c5ef..ff7b466 100644 | |
17 --- a/third_party/protobuf/src/google/protobuf/arena.cc | |
18 +++ b/third_party/protobuf/src/google/protobuf/arena.cc | |
19 @@ -38,17 +38,17 @@ namespace google { | |
20 namespace protobuf { | |
21 | |
22 google::protobuf::internal::SequenceNumber Arena::lifecycle_id_generator_; | |
23 -#ifdef PROTOBUF_USE_DLLS | |
24 -Arena::ThreadCache& Arena::thread_cache() { | |
25 - static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_ = { -1, NULL }; | |
26 - return thread_cache_; | |
27 -} | |
28 -#elif defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) | |
29 +#if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) | |
30 Arena::ThreadCache& Arena::thread_cache() { | |
31 static internal::ThreadLocalStorage<ThreadCache>* thread_cache_ = | |
32 new internal::ThreadLocalStorage<ThreadCache>(); | |
33 return *thread_cache_->Get(); | |
34 } | |
35 +#elif defined(PROTOBUF_USE_DLLS) | |
36 +Arena::ThreadCache& Arena::thread_cache() { | |
37 + static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_ = { -1, NULL }; | |
38 + return thread_cache_; | |
39 +} | |
40 #else | |
41 GOOGLE_THREAD_LOCAL Arena::ThreadCache Arena::thread_cache_ = { -1, NULL }; | |
42 #endif | |
43 diff --git a/third_party/protobuf/src/google/protobuf/arena.h b/third_party/prot
obuf/src/google/protobuf/arena.h | |
44 index 51149ba..2ef20a3 100644 | |
45 --- a/third_party/protobuf/src/google/protobuf/arena.h | |
46 +++ b/third_party/protobuf/src/google/protobuf/arena.h | |
47 @@ -34,7 +34,16 @@ | |
48 #if __cplusplus >= 201103L | |
49 #include <google/protobuf/stubs/type_traits.h> | |
50 #endif | |
51 +#if defined(_MSC_VER) && !_HAS_EXCEPTIONS | |
52 +// Work around bugs in MSVC <typeinfo> header when _HAS_EXCEPTIONS=0. | |
53 +#include <exception> | |
54 #include <typeinfo> | |
55 +namespace std { | |
56 +using type_info = ::type_info; | |
57 +} | |
58 +#else | |
59 +#include <typeinfo> | |
60 +#endif | |
61 | |
62 #include <google/protobuf/stubs/atomic_sequence_num.h> | |
63 #include <google/protobuf/stubs/atomicops.h> | |
64 @@ -525,15 +534,15 @@ class LIBPROTOBUF_EXPORT Arena { | |
65 | |
66 static const size_t kHeaderSize = sizeof(Block); | |
67 static google::protobuf::internal::SequenceNumber lifecycle_id_generator_; | |
68 -#ifdef PROTOBUF_USE_DLLS | |
69 - // Thread local variables cannot be exposed through DLL interface but we can | |
70 - // wrap them in static functions. | |
71 - static ThreadCache& thread_cache(); | |
72 -#elif defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) | |
73 +#if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL) | |
74 // Android ndk does not support GOOGLE_THREAD_LOCAL keyword so we use a custo
m thread | |
75 // local storage class we implemented. | |
76 // iOS also does not support the GOOGLE_THREAD_LOCAL keyword. | |
77 static ThreadCache& thread_cache(); | |
78 +#elif defined(PROTOBUF_USE_DLLS) | |
79 + // Thread local variables cannot be exposed through DLL interface but we can | |
80 + // wrap them in static functions. | |
81 + static ThreadCache& thread_cache(); | |
82 #else | |
83 static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_; | |
84 static ThreadCache& thread_cache() { return thread_cache_; } | |
85 diff --git a/third_party/protobuf/src/google/protobuf/message_lite.cc b/third_pa
rty/protobuf/src/google/protobuf/message_lite.cc | |
86 index 4f63ad2..da6e933 100644 | |
87 --- a/third_party/protobuf/src/google/protobuf/message_lite.cc | |
88 +++ b/third_party/protobuf/src/google/protobuf/message_lite.cc | |
89 @@ -35,6 +35,7 @@ | |
90 | |
91 #include <google/protobuf/message_lite.h> | |
92 #include <google/protobuf/arena.h> | |
93 +#include <google/protobuf/repeated_field.h> | |
94 #include <string> | |
95 #include <google/protobuf/stubs/common.h> | |
96 #include <google/protobuf/io/coded_stream.h> | |
97 @@ -353,5 +354,18 @@ string MessageLite::SerializePartialAsString() const { | |
98 return output; | |
99 } | |
100 | |
101 +namespace internal { | |
102 +template<> | |
103 +MessageLite* GenericTypeHandler<MessageLite>::NewFromPrototype( | |
104 + const MessageLite* prototype, google::protobuf::Arena* arena) { | |
105 + return prototype->New(arena); | |
106 +} | |
107 +template <> | |
108 +void GenericTypeHandler<MessageLite>::Merge(const MessageLite& from, | |
109 + MessageLite* to) { | |
110 + to->CheckTypeAndMergeFrom(from); | |
111 +} | |
112 +} // namespace internal | |
113 + | |
114 } // namespace protobuf | |
115 } // namespace google | |
116 diff --git a/third_party/protobuf/src/google/protobuf/repeated_field.h b/third_p
arty/protobuf/src/google/protobuf/repeated_field.h | |
117 index 14f4629..03577ea 100644 | |
118 --- a/third_party/protobuf/src/google/protobuf/repeated_field.h | |
119 +++ b/third_party/protobuf/src/google/protobuf/repeated_field.h | |
120 @@ -545,17 +545,11 @@ class GenericTypeHandler { | |
121 // constructors and destructors. Note that the GOOGLE_ATTRIBUTE_NOINLINE macr
o | |
122 // requires the 'inline' storage class here, which is somewhat confusing, but | |
123 // the compiler does the right thing. | |
124 - static inline GenericType* NewFromPrototype(const GenericType* prototype, | |
125 - ::google::protobuf::Arena* arena
= NULL) | |
126 - GOOGLE_ATTRIBUTE_NOINLINE { | |
127 - return New(arena); | |
128 - } | |
129 - static inline void Delete(GenericType* value, Arena* arena) | |
130 - GOOGLE_ATTRIBUTE_NOINLINE { | |
131 - if (arena == NULL) { | |
132 - delete value; | |
133 - } | |
134 - } | |
135 + static GenericType* NewFromPrototype(const GenericType* prototype, | |
136 + ::google::protobuf::Arena* arena = NULL) | |
137 + GOOGLE_ATTRIBUTE_NOINLINE; | |
138 + static void Delete(GenericType* value, Arena* arena) | |
139 + GOOGLE_ATTRIBUTE_NOINLINE; | |
140 static inline ::google::protobuf::Arena* GetArena(GenericType* value) { | |
141 return ::google::protobuf::Arena::GetArena<Type>(value); | |
142 } | |
143 @@ -564,10 +558,8 @@ class GenericTypeHandler { | |
144 } | |
145 | |
146 static inline void Clear(GenericType* value) { value->Clear(); } | |
147 - static inline void Merge(const GenericType& from, GenericType* to) | |
148 - GOOGLE_ATTRIBUTE_NOINLINE { | |
149 - to->MergeFrom(from); | |
150 - } | |
151 + static void Merge(const GenericType& from, GenericType* to) | |
152 + GOOGLE_ATTRIBUTE_NOINLINE; | |
153 static inline int SpaceUsed(const GenericType& value) { | |
154 return value.SpaceUsed(); | |
155 } | |
156 @@ -576,11 +568,32 @@ class GenericTypeHandler { | |
157 } | |
158 }; | |
159 | |
160 -template<> | |
161 -inline MessageLite* GenericTypeHandler<MessageLite>::NewFromPrototype( | |
162 - const MessageLite* prototype, google::protobuf::Arena* arena) { | |
163 - return prototype->New(arena); | |
164 +template<typename GenericType> | |
165 +GenericType* GenericTypeHandler<GenericType>::NewFromPrototype( | |
166 + const GenericType* prototype, | |
167 + ::google::protobuf::Arena* arena) { | |
168 + return New(arena); | |
169 +} | |
170 +template<typename GenericType> | |
171 +void GenericTypeHandler<GenericType>::Delete(GenericType* value, Arena* arena)
{ | |
172 + if (arena == NULL) { | |
173 + delete value; | |
174 + } | |
175 +} | |
176 +template<typename GenericType> | |
177 +void GenericTypeHandler<GenericType>::Merge(const GenericType& from, | |
178 + GenericType* to) { | |
179 + to->MergeFrom(from); | |
180 } | |
181 + | |
182 +// NewFromPrototype() and Merge() cannot be defined here; if they're declared | |
183 +// inline the compiler will complain about not matching ATTRIBUTE_NOINLINE | |
184 +// above, and if not, compilation will result in multiple definitions. These | |
185 +// are therefore declared as specializations here and defined in | |
186 +// message_lite.cc. | |
187 +template<> | |
188 +MessageLite* GenericTypeHandler<MessageLite>::NewFromPrototype( | |
189 + const MessageLite* prototype, google::protobuf::Arena* arena); | |
190 template<> | |
191 inline google::protobuf::Arena* GenericTypeHandler<MessageLite>::GetArena( | |
192 MessageLite* value) { | |
193 @@ -591,14 +604,9 @@ inline void* GenericTypeHandler<MessageLite>::GetMaybeArena
Pointer( | |
194 MessageLite* value) { | |
195 return value->GetMaybeArenaPointer(); | |
196 } | |
197 - | |
198 -// Implements GenericTypeHandler specialization required by RepeatedPtrFields | |
199 -// to work with MessageLite type. | |
200 template <> | |
201 -inline void GenericTypeHandler<MessageLite>::Merge( | |
202 - const MessageLite& from, MessageLite* to) { | |
203 - to->CheckTypeAndMergeFrom(from); | |
204 -} | |
205 +void GenericTypeHandler<MessageLite>::Merge(const MessageLite& from, | |
206 + MessageLite* to); | |
207 | |
208 // Declarations of the specialization as we cannot define them here, as the | |
209 // header that defines ProtocolMessage depends on types defined in this header. | |
210 diff --git a/third_party/protobuf/src/google/protobuf/stubs/hash.h b/third_party
/protobuf/src/google/protobuf/stubs/hash.h | |
211 index 9a6b217..3ff7253 100644 | |
212 --- a/third_party/protobuf/src/google/protobuf/stubs/hash.h | |
213 +++ b/third_party/protobuf/src/google/protobuf/stubs/hash.h | |
214 @@ -41,10 +41,10 @@ | |
215 #define GOOGLE_PROTOBUF_HAVE_HASH_MAP 1 | |
216 #define GOOGLE_PROTOBUF_HAVE_HASH_SET 1 | |
217 | |
218 -// Use C++11 unordered_{map|set} if available. Otherwise, libc++ always support | |
219 -// unordered_{map|set} | |
220 -#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X) || \ | |
221 - defined(_LIBCPP_VERSION) | |
222 +// Use C++11 unordered_{map|set} if available. | |
223 +#if ((__cplusplus >= 201103L) && \ | |
224 + ((defined(__GLIBCXX__) && (__GLIBCXX__ > 20090421)) || \ | |
225 + (defined(_LIBCPP_VERSION) && (_LIBCPP_STD_VER >= 11)))) | |
226 # define GOOGLE_PROTOBUF_HAS_CXX11_HASH | |
227 | |
228 // For XCode >= 4.6: the compiler is clang with libc++. | |
229 diff --git a/third_party/protobuf/src/google/protobuf/stubs/mathlimits.h b/third
_party/protobuf/src/google/protobuf/stubs/mathlimits.h | |
230 index d984694..090d1c0 100644 | |
231 --- a/third_party/protobuf/src/google/protobuf/stubs/mathlimits.h | |
232 +++ b/third_party/protobuf/src/google/protobuf/stubs/mathlimits.h | |
233 @@ -43,15 +43,10 @@ | |
234 #ifndef UTIL_MATH_MATHLIMITS_H__ | |
235 #define UTIL_MATH_MATHLIMITS_H__ | |
236 | |
237 -// <math.h> lacks a lot of prototypes. However, this file needs <math.h> to | |
238 -// access old-fashioned isinf et al. Even worse more: this file must not | |
239 -// include <cmath> because that breaks the definition of isinf with gcc 4.9. | |
240 -// | |
241 -// TODO(mec): after C++11 everywhere, use <cmath> and std::isinf in this file. | |
242 -#include <math.h> | |
243 #include <string.h> | |
244 | |
245 #include <cfloat> | |
246 +#include <cmath> | |
247 | |
248 #include <google/protobuf/stubs/common.h> | |
249 | |
250 @@ -230,11 +225,11 @@ DECL_UNSIGNED_INT_LIMITS(unsigned long long int) | |
251 static bool IsNegInf(const Type x) { return _fpclass(x) == _FPCLASS_NINF; } | |
252 #else | |
253 #define DECL_FP_LIMIT_FUNCS \ | |
254 - static bool IsFinite(const Type x) { return !isinf(x) && !isnan(x); } \ | |
255 - static bool IsNaN(const Type x) { return isnan(x); } \ | |
256 - static bool IsInf(const Type x) { return isinf(x); } \ | |
257 - static bool IsPosInf(const Type x) { return isinf(x) && x > 0; } \ | |
258 - static bool IsNegInf(const Type x) { return isinf(x) && x < 0; } | |
259 + static bool IsFinite(const Type x) { return !std::isinf(x) && !std::isnan(x
); } \ | |
260 + static bool IsNaN(const Type x) { return std::isnan(x); } \ | |
261 + static bool IsInf(const Type x) { return std::isinf(x); } \ | |
262 + static bool IsPosInf(const Type x) { return std::isinf(x) && x > 0; } \ | |
263 + static bool IsNegInf(const Type x) { return std::isinf(x) && x < 0; } | |
264 #endif | |
265 | |
266 // We can't put floating-point constant values in the header here because | |
267 diff --git a/third_party/protobuf/src/google/protobuf/stubs/mathutil.h b/third_p
arty/protobuf/src/google/protobuf/stubs/mathutil.h | |
268 index 99c4d45..cfd073b 100644 | |
269 --- a/third_party/protobuf/src/google/protobuf/stubs/mathutil.h | |
270 +++ b/third_party/protobuf/src/google/protobuf/stubs/mathutil.h | |
271 @@ -31,7 +31,8 @@ | |
272 #define GOOGLE_PROTOBUF_STUBS_MATHUTIL_H_ | |
273 | |
274 #include <float.h> | |
275 -#include <math.h> | |
276 + | |
277 +#include <cmath> | |
278 | |
279 #include <google/protobuf/stubs/common.h> | |
280 #include <google/protobuf/stubs/logging.h> | |
281 @@ -45,9 +46,9 @@ bool IsNan(T value) { | |
282 return false; | |
283 } | |
284 template<> | |
285 -inline bool IsNan(float value) { return isnan(value); } | |
286 +inline bool IsNan(float value) { return std::isnan(value); } | |
287 template<> | |
288 -inline bool IsNan(double value) { return isnan(value); } | |
289 +inline bool IsNan(double value) { return std::isnan(value); } | |
290 | |
291 template<typename T> | |
292 bool AlmostEquals(T a, T b) { | |
293 diff --git a/third_party/protobuf/src/google/protobuf/stubs/port.h b/third_party
/protobuf/src/google/protobuf/stubs/port.h | |
294 index 8a5d1a1..da695ff 100644 | |
295 --- a/third_party/protobuf/src/google/protobuf/stubs/port.h | |
296 +++ b/third_party/protobuf/src/google/protobuf/stubs/port.h | |
297 @@ -79,6 +79,15 @@ | |
298 #define LIBPROTOC_EXPORT | |
299 #endif | |
300 | |
301 +// These #includes are for the byte swap functions declared later on. | |
302 +#ifdef _MSC_VER | |
303 +#include <stdlib.h> // NOLINT(build/include) | |
304 +#elif defined(__APPLE__) | |
305 +#include <libkern/OSByteOrder.h> | |
306 +#elif defined(__GLIBC__) || defined(__CYGWIN__) | |
307 +#include <byteswap.h> // IWYU pragma: export | |
308 +#endif | |
309 + | |
310 // =================================================================== | |
311 // from google3/base/port.h | |
312 namespace google { | |
313 @@ -272,7 +281,6 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) { | |
314 // The following guarantees declaration of the byte swap functions, and | |
315 // defines __BYTE_ORDER for MSVC | |
316 #ifdef _MSC_VER | |
317 -#include <stdlib.h> // NOLINT(build/include) | |
318 #define __BYTE_ORDER __LITTLE_ENDIAN | |
319 #define bswap_16(x) _byteswap_ushort(x) | |
320 #define bswap_32(x) _byteswap_ulong(x) | |
321 @@ -280,15 +288,11 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) { | |
322 | |
323 #elif defined(__APPLE__) | |
324 // Mac OS X / Darwin features | |
325 -#include <libkern/OSByteOrder.h> | |
326 #define bswap_16(x) OSSwapInt16(x) | |
327 #define bswap_32(x) OSSwapInt32(x) | |
328 #define bswap_64(x) OSSwapInt64(x) | |
329 | |
330 -#elif defined(__GLIBC__) || defined(__CYGWIN__) | |
331 -#include <byteswap.h> // IWYU pragma: export | |
332 - | |
333 -#else | |
334 +#elif !defined(__GLIBC__) && !defined(__CYGWIN__) | |
335 | |
336 static inline uint16 bswap_16(uint16 x) { | |
337 return static_cast<uint16>(((x & 0xFF) << 8) | ((x & 0xFF00) >> 8)); | |
338 diff --git a/third_party/protobuf/src/google/protobuf/stubs/time.cc b/third_part
y/protobuf/src/google/protobuf/stubs/time.cc | |
339 index 3319a24..49c0412 100644 | |
340 --- a/third_party/protobuf/src/google/protobuf/stubs/time.cc | |
341 +++ b/third_party/protobuf/src/google/protobuf/stubs/time.cc | |
342 @@ -21,7 +21,6 @@ static const int64 kSecondsFromEraToEpoch = 62135596800LL; | |
343 static const int64 kMinTime = -62135596800LL; // 0001-01-01T00:00:00 | |
344 static const int64 kMaxTime = 253402300799LL; // 9999-12-31T23:59:59 | |
345 | |
346 -static const int kNanosPerSecond = 1000000000; | |
347 static const int kNanosPerMillisecond = 1000000; | |
348 static const int kNanosPerMicrosecond = 1000; | |
349 | |
OLD | NEW |