diff --git a/deps/ox/src/ox/mc/read.hpp b/deps/ox/src/ox/mc/read.hpp index bba31b01..d96e4d76 100644 --- a/deps/ox/src/ox/mc/read.hpp +++ b/deps/ox/src/ox/mc/read.hpp @@ -248,12 +248,17 @@ constexpr Error MetalClawReaderTemplate::field(const char*, HashMap(len))); - for (std::size_t i = 0; i < len; ++i) { + // this loop body needs to be in a lambda because of the potential alloca call + constexpr auto loopBody = [](auto& handler) { oxRequire(keyLen, handler.stringLength(nullptr)); auto wkey = ox_malloca(keyLen + 1, char, 0); auto wkeyPtr = wkey.get(); oxReturnError(handler.fieldCString("", &wkeyPtr, keyLen + 1)); oxReturnError(handler.field("", &val->operator[](wkey.get()))); + return OxError(0); + }; + for (std::size_t i = 0; i < len; ++i) { + oxReturnError(loopBody(handler)); } } }