Hello. I'm trying to use arena in protobuf with C++ but keep getting weird assertion fail. I create std::array<char, 1024> on the stack and pass it to the arena as the initial block like this:
google::protobuf::Arena m_arena{arenaBuf.data(), arenaBuf.size()}.
During arena construction i get "CHECK failed: (reinterpret_cast<uintptr_t>(mem) & 7) == (0u)". Could you please help me to figure out what does it mean? What should i do to fix it?
P.s. it's very weird because only in 1 test file this assert fails. I do the same everywhere in the project, but only 1 test doesn't want to run and fails with this assert.
Also, we got some old protobuf code. Not one that in github master. The function with weird assert is this:
void ThreadSafeArena::InitializeFrom(void* mem, size_t size)
{
GOOGLE_DCHECK_EQ(reinterpret_cast<uintptr_t>(mem) & 7, 0u);
GOOGLE_DCHECK(!AllocPolicy());
// Reset should call InitializeWithPolicy instead.
Init();
// Ignore initial block if it is too small.
if (mem != nullptr && size >= kBlockHeaderSize + kSerialArenaSize)
{
alloc_policy_.set_is_user_owned_initial_block(true);
SetInitialBlock(mem, size);
}
}