diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-04-15 02:48:35 -0400 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-04-17 02:30:10 +0300 |
| commit | 7e0c6d7edc538b1648792e73b0c8aab1a35d0bff (patch) | |
| tree | c6d77d4627ec5485df971a97bf0af4faedcf28e6 /src | |
| parent | 7fad555e5e16e6cb71554981394387a0622093b0 (diff) | |
| download | zig-7e0c6d7edc538b1648792e73b0c8aab1a35d0bff.tar.gz zig-7e0c6d7edc538b1648792e73b0c8aab1a35d0bff.zip | |
Sema: fix empty infinite loops
Closes #15284
Diffstat (limited to 'src')
| -rw-r--r-- | src/Sema.zig | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 9cf342f75b..83441793a4 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -5225,17 +5225,17 @@ fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError try sema.analyzeBody(&loop_block, body); - if (sema.typeOf(Air.indexToRef(loop_block.instructions.items[loop_block.instructions.items.len - 1])).isNoReturn()) { + const loop_block_len = loop_block.instructions.items.len; + if (loop_block_len > 0 and sema.typeOf(Air.indexToRef(loop_block.instructions.items[loop_block_len - 1])).isNoReturn()) { // If the loop ended with a noreturn terminator, then there is no way for it to loop, // so we can just use the block instead. try child_block.instructions.appendSlice(gpa, loop_block.instructions.items); } else { try child_block.instructions.append(gpa, loop_inst); - try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.Block).Struct.fields.len + - loop_block.instructions.items.len); + try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.Block).Struct.fields.len + loop_block_len); sema.air_instructions.items(.data)[loop_inst].ty_pl.payload = sema.addExtraAssumeCapacity( - Air.Block{ .body_len = @intCast(u32, loop_block.instructions.items.len) }, + Air.Block{ .body_len = @intCast(u32, loop_block_len) }, ); sema.air_extra.appendSliceAssumeCapacity(loop_block.instructions.items); } |
