diff --git a/src/Sema.zig b/src/Sema.zig index 1a33c76ad663fb0b523ebaa7b80a599b80fa8566..f31e71047fa3d4a90b1e5070d046e25d3c4ed43b 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 07519f16b5b85636462d4ccdeeeb9f80641da7be..b8e9b1a2b96c89f3640e6441b0d35b799d717b14 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; +}