| author | |
| committer | |
| log | 09a8fa2120824606011ba63b3fea40cc4e4ac83b |
| tree | 4dfcc08c2e29a44af052e713a6ba80033c3820df |
| parent | cc82620b2a0c0ca1e3aa1aa35657b626acd468a4 |
2 files changed, 10 insertions(+), 0 deletions(-)
src/Sema.zig+1| ... | ... | @@ -1813,6 +1813,7 @@ fn analyzeBodyInner( |
| 1813 | 1813 | const extra = sema.code.extraData(Zir.Inst.DeferErrCode, inst_data.payload_index).data; |
| 1814 | 1814 | const defer_body = sema.code.bodySlice(extra.index, extra.len); |
| 1815 | 1815 | const err_code = try sema.resolveInst(inst_data.err_code); |
| 1816 | try map.ensureSpaceForInstructions(sema.gpa, defer_body); | |
| 1816 | 1817 | map.putAssumeCapacity(extra.remapped_err_code, err_code); |
| 1817 | 1818 | if (sema.analyzeBodyInner(block, defer_body)) |_| { |
| 1818 | 1819 | // The defer terminated noreturn - no more analysis needed. |
test/behavior/defer.zig+9| ... | ... | @@ -234,3 +234,12 @@ test "errdefer capture" { |
| 234 | 234 | s.bar2() catch {}; |
| 235 | 235 | if (s.fail) return error.TestExpectedError; |
| 236 | 236 | } |
| 237 | ||
| 238 | test "errdefer in test block" { | |
| 239 | errdefer |err| { | |
| 240 | _ = &err; | |
| 241 | } | |
| 242 | var x: bool = false; | |
| 243 | _ = &x; | |
| 244 | if (x) return error.Something; | |
| 245 | } |