zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 09a8fa2120824606011ba63b3fea40cc4e4ac83b (tree)
parent cc82620b2a0c0ca1e3aa1aa35657b626acd468a4
Author: David Rubin <daviru007@icloud.com>
Date:   Thu, 12 Dec 2024 18:00:33 -0800

ensure `InstMap` capacity before remapping error code

Diffstat:
Msrc/Sema.zig | 1+
Mtest/behavior/defer.zig | 9+++++++++
2 files changed, 10 insertions(+), 0 deletions(-)

diff --git 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 @@ -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; +}