ensure InstMap capacity before remapping error code

This commit is contained in:
David Rubin 2024-12-12 18:00:33 -08:00 committed by Andrew Kelley
parent cc82620b2a
commit 09a8fa2120
2 changed files with 10 additions and 0 deletions

View file

@ -1813,6 +1813,7 @@ fn analyzeBodyInner(
const extra = sema.code.extraData(Zir.Inst.DeferErrCode, inst_data.payload_index).data; const extra = sema.code.extraData(Zir.Inst.DeferErrCode, inst_data.payload_index).data;
const defer_body = sema.code.bodySlice(extra.index, extra.len); const defer_body = sema.code.bodySlice(extra.index, extra.len);
const err_code = try sema.resolveInst(inst_data.err_code); 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); map.putAssumeCapacity(extra.remapped_err_code, err_code);
if (sema.analyzeBodyInner(block, defer_body)) |_| { if (sema.analyzeBodyInner(block, defer_body)) |_| {
// The defer terminated noreturn - no more analysis needed. // The defer terminated noreturn - no more analysis needed.

View file

@ -234,3 +234,12 @@ test "errdefer capture" {
s.bar2() catch {}; s.bar2() catch {};
if (s.fail) return error.TestExpectedError; if (s.fail) return error.TestExpectedError;
} }
test "errdefer in test block" {
errdefer |err| {
_ = &err;
}
var x: bool = false;
_ = &x;
if (x) return error.Something;
}