Jelajahi Sumber

Merge pull request #3503 from gburgessiv/master

Work around a bug in clang's static analyzer
Jisi Liu 8 tahun lalu
induk
melakukan
98a3734b5a
1 mengubah file dengan 4 tambahan dan 1 penghapusan
  1. 4 1
      src/google/protobuf/metadata_lite.h

+ 4 - 1
src/google/protobuf/metadata_lite.h

@@ -150,8 +150,11 @@ class InternalMetadataWithArenaBase {
   GOOGLE_ATTRIBUTE_NOINLINE T* mutable_unknown_fields_slow() {
     Arena* my_arena = arena();
     Container* container = Arena::Create<Container>(my_arena);
+    // Two-step assignment works around a bug in clang's static analyzer:
+    // https://bugs.llvm.org/show_bug.cgi?id=34198.
+    ptr_ = container;
     ptr_ = reinterpret_cast<void*>(
-        reinterpret_cast<intptr_t>(container) | kTagContainer);
+        reinterpret_cast<intptr_t>(ptr_) | kTagContainer);
     container->arena = my_arena;
     return &(container->unknown_fields);
   }