Avoid MSVC miscompile

Seems MSVC has trouble compiling this statically initialized lambda in a template; crash goes away when I split it out to be a named function instead.
pull/36893/head
Craig Tiller 11 months ago
parent 4f3fba65fb
commit 8ff3a2286d
  1. 8
      src/core/lib/resource_quota/arena.h

@ -93,9 +93,14 @@ class ArenaContextTraits : public BaseArenaContextTraits {
static const uint16_t id_;
};
template <typename T>
void DestroyArenaContext(void* p) {
ArenaContextType<T>::Destroy(static_cast<T*>(p));
}
template <typename T>
const uint16_t ArenaContextTraits<T>::id_ = BaseArenaContextTraits::MakeId(
[](void* ptr) { ArenaContextType<T>::Destroy(static_cast<T*>(ptr)); });
DestroyArenaContext<T>);
template <typename T, typename A, typename B>
struct IfArray {
@ -283,6 +288,7 @@ class Arena final : public RefCounted<Arena, NonPolymorphicRefCount,
ArenaContextType<T>::Destroy(static_cast<T*>(slot));
}
slot = context;
DCHECK_EQ(GetContext<T>(), context);
}
private:

Loading…
Cancel
Save