mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
ensure InstMap capacity before remapping error code
This commit is contained in:
parent
cc82620b2a
commit
09a8fa2120
2 changed files with 10 additions and 0 deletions
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue