From 8ff3a2286ddd20147d2c9c23b5b96e630fb5f24d Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 11 Jun 2024 20:18:33 -0700 Subject: [PATCH] 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. --- src/core/lib/resource_quota/arena.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/lib/resource_quota/arena.h b/src/core/lib/resource_quota/arena.h index 916dbec4548..d9cb6b14492 100644 --- a/src/core/lib/resource_quota/arena.h +++ b/src/core/lib/resource_quota/arena.h @@ -93,9 +93,14 @@ class ArenaContextTraits : public BaseArenaContextTraits { static const uint16_t id_; }; +template +void DestroyArenaContext(void* p) { + ArenaContextType::Destroy(static_cast(p)); +} + template const uint16_t ArenaContextTraits::id_ = BaseArenaContextTraits::MakeId( - [](void* ptr) { ArenaContextType::Destroy(static_cast(ptr)); }); + DestroyArenaContext); template struct IfArray { @@ -283,6 +288,7 @@ class Arena final : public RefCounted::Destroy(static_cast(slot)); } slot = context; + DCHECK_EQ(GetContext(), context); } private: