diff options
| author | Veikka Tuominen <git@vexu.eu> | 2023-01-06 19:03:40 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-01-10 19:17:42 +0200 |
| commit | 83673a8b5f508376c81deaa4b01815474873eb69 (patch) | |
| tree | ccfd27379ec2bb5af7e57ce188350f3831856e04 /src/Sema.zig | |
| parent | fd6b79e67f0cf91a72c121fc6fd484a03f487506 (diff) | |
| download | zig-83673a8b5f508376c81deaa4b01815474873eb69.tar.gz zig-83673a8b5f508376c81deaa4b01815474873eb69.zip | |
fix errdefers in functions that can't return errors
This was broken by 58caed1c71179f48c4e7bffadef0392fa8381e72
Closes #14053
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 6fa2f92dd7..ec698f7a3b 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -953,6 +953,7 @@ fn analyzeBodyInner( .int_type => try sema.zirIntType(block, inst), .is_non_err => try sema.zirIsNonErr(block, inst), .is_non_err_ptr => try sema.zirIsNonErrPtr(block, inst), + .ret_is_non_err => try sema.zirRetIsNonErr(block, inst), .is_non_null => try sema.zirIsNonNull(block, inst), .is_non_null_ptr => try sema.zirIsNonNullPtr(block, inst), .merge_error_sets => try sema.zirMergeErrorSets(block, inst), @@ -10288,6 +10289,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError .ret_err_value_code, .restore_err_ret_index, .is_non_err, + .ret_is_non_err, .condbr, => {}, else => break, @@ -16577,7 +16579,7 @@ fn zirIsNonErr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai const src = inst_data.src(); const operand = try sema.resolveInst(inst_data.operand); try sema.checkErrorType(block, src, sema.typeOf(operand)); - return sema.analyzeIsNonErr(block, inst_data.src(), operand); + return sema.analyzeIsNonErr(block, src, operand); } fn zirIsNonErrPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { @@ -16592,6 +16594,16 @@ fn zirIsNonErrPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError return sema.analyzeIsNonErr(block, src, loaded); } +fn zirRetIsNonErr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { + const tracy = trace(@src()); + defer tracy.end(); + + const inst_data = sema.code.instructions.items(.data)[inst].un_node; + const src = inst_data.src(); + const operand = try sema.resolveInst(inst_data.operand); + return sema.analyzeIsNonErr(block, src, operand); +} + fn zirCondbr( sema: *Sema, parent_block: *Block, |
