From 09a8fa2120824606011ba63b3fea40cc4e4ac83b Mon Sep 17 00:00:00 2001 From: David Rubin Date: Thu, 12 Dec 2024 18:00:33 -0800 Subject: [PATCH] ensure `InstMap` capacity before remapping error code --- src/Sema.zig | 1 + test/behavior/defer.zig | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/Sema.zig b/src/Sema.zig index 1a33c76ad6..f31e71047f 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1813,6 +1813,7 @@ fn analyzeBodyInner( const extra = sema.code.extraData(Zir.Inst.DeferErrCode, inst_data.payload_index).data; const defer_body = sema.code.bodySlice(extra.index, extra.len); const err_code = try sema.resolveInst(inst_data.err_code); + try map.ensureSpaceForInstructions(sema.gpa, defer_body); map.putAssumeCapacity(extra.remapped_err_code, err_code); if (sema.analyzeBodyInner(block, defer_body)) |_| { // The defer terminated noreturn - no more analysis needed. diff --git a/test/behavior/defer.zig b/test/behavior/defer.zig index 07519f16b5..b8e9b1a2b9 100644 --- a/test/behavior/defer.zig +++ b/test/behavior/defer.zig @@ -234,3 +234,12 @@ test "errdefer capture" { s.bar2() catch {}; if (s.fail) return error.TestExpectedError; } + +test "errdefer in test block" { + errdefer |err| { + _ = &err; + } + var x: bool = false; + _ = &x; + if (x) return error.Something; +}