aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJisi Liu <liujisi@google.com>2017-08-24 10:17:55 -0700
committerGitHub <noreply@github.com>2017-08-24 10:17:55 -0700
commit98a3734b5aa680f565af10a5fd4430baa4b4aa10 (patch)
treefd7b282a81a9b1dfc4a5954a59ba0ea2d50ebc04
parent859d94a5f02162c08e45410c2b032f6b8b60700e (diff)
parent6cecd20e259b09dd09a78d0f1b742be41e715806 (diff)
downloadprotobuf-98a3734b5aa680f565af10a5fd4430baa4b4aa10.tar.gz
protobuf-98a3734b5aa680f565af10a5fd4430baa4b4aa10.tar.bz2
protobuf-98a3734b5aa680f565af10a5fd4430baa4b4aa10.zip
Merge pull request #3503 from gburgessiv/master
Work around a bug in clang's static analyzer
-rw-r--r--src/google/protobuf/metadata_lite.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/google/protobuf/metadata_lite.h b/src/google/protobuf/metadata_lite.h
index 64fde0c6..6022be92 100644
--- a/src/google/protobuf/metadata_lite.h
+++ b/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);
}