Commit 6cecd20e authored by George Burgess IV's avatar George Burgess IV Committed by George Burgess

Work around a bug in clang's static analyzer

Due to https://bugs.llvm.org/show_bug.cgi?id=34198, clang's static
analyzer emits diagnostics about leaking `container`. Doing this
assignment in two steps works around this, and shouldn't cause these
issues.
parent 5e39ecc5
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment