diff options
| author | David Rubin <daviru007@icloud.com> | 2024-12-12 18:00:33 -0800 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-12-14 16:41:17 -0500 |
| commit | 09a8fa2120824606011ba63b3fea40cc4e4ac83b (patch) | |
| tree | 4dfcc08c2e29a44af052e713a6ba80033c3820df | |
| parent | cc82620b2a0c0ca1e3aa1aa35657b626acd468a4 (diff) | |
| download | zig-09a8fa2120824606011ba63b3fea40cc4e4ac83b.tar.gz zig-09a8fa2120824606011ba63b3fea40cc4e4ac83b.zip | |
ensure `InstMap` capacity before remapping error code
| -rw-r--r-- | src/Sema.zig | 1 | ||||
| -rw-r--r-- | test/behavior/defer.zig | 9 |
2 files changed, 10 insertions, 0 deletions
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; +} |
