Browse Source

A workaround for MSVC 2010 x64 platform bug,
which affects proto compiler in generating field has_bit mask.

liujisi@google.com 14 years ago
parent
commit
cb6dd4ef5f
1 changed files with 7 additions and 0 deletions
  1. 7 0
      src/google/protobuf/stubs/strutil.cc

+ 7 - 0
src/google/protobuf/stubs/strutil.cc

@@ -670,7 +670,14 @@ char *InternalFastHexToBuffer(uint64 value, char* buffer, int num_byte) {
   static const char *hexdigits = "0123456789abcdef";
   buffer[num_byte] = '\0';
   for (int i = num_byte - 1; i >= 0; i--) {
+#ifdef _M_X64
+    // MSVC x64 platform has a bug optimizing the uint32(value) in the #else
+    // block. Given that the uint32 cast was to improve performance on 32-bit
+    // platforms, we use 64-bit '&' directly.
+    buffer[i] = hexdigits[value & 0xf];
+#else
     buffer[i] = hexdigits[uint32(value) & 0xf];
+#endif
     value >>= 4;
   }
   return buffer;