| ... | ... | @@ -6152,11 +6152,11 @@ fn switchExpr( |
| 6152 | 6152 | } |
| 6153 | 6153 | const case_result = try expr(&case_scope, sub_scope, block_scope.break_result_loc, case.ast.target_expr); |
| 6154 | 6154 | try checkUsed(parent_gz, &case_scope.base, sub_scope); |
| 6155 | try case_scope.addDbgBlockEnd(); |
| 6155 | 6156 | if (!parent_gz.refIsNoReturn(case_result)) { |
| 6156 | 6157 | block_scope.break_count += 1; |
| 6157 | 6158 | _ = try case_scope.addBreak(.@"break", switch_block, case_result); |
| 6158 | 6159 | } |
| 6159 | | try case_scope.addDbgBlockEnd(); |
| 6160 | 6160 | |
| 6161 | 6161 | const case_slice = case_scope.instructionsSlice(); |
| 6162 | 6162 | payloads.items[body_len_index] = @intCast(u32, case_slice.len); |
| ... | ... | @@ -10871,18 +10871,22 @@ const GenZir = struct { |
| 10871 | 10871 | |
| 10872 | 10872 | fn addDbgBlockEnd(gz: *GenZir) !void { |
| 10873 | 10873 | if (gz.force_comptime) return; |
| 10874 | const gpa = gz.astgen.gpa; |
| 10874 | 10875 | |
| 10875 | | if (gz.endsWithNoReturn()) { |
| 10876 | | const last = gz.instructions.pop(); |
| 10877 | | _ = try gz.add(.{ .tag = .extended, .data = .{ |
| 10878 | | .extended = .{ .opcode = .dbg_block_end, .small = undefined, .operand = undefined }, |
| 10879 | | } }); |
| 10880 | | try gz.instructions.append(gz.astgen.gpa, last); |
| 10881 | | } else { |
| 10882 | | _ = try gz.add(.{ .tag = .extended, .data = .{ |
| 10883 | | .extended = .{ .opcode = .dbg_block_end, .small = undefined, .operand = undefined }, |
| 10884 | | } }); |
| 10876 | const tags = gz.astgen.instructions.items(.tag); |
| 10877 | const data = gz.astgen.instructions.items(.data); |
| 10878 | const last_inst = gz.instructions.items[gz.instructions.items.len - 1]; |
| 10879 | // remove dbg_block_begin immediately followed by dbg_block_end |
| 10880 | if (tags[last_inst] == .extended and data[last_inst].extended.opcode == .dbg_block_begin) { |
| 10881 | _ = gz.instructions.pop(); |
| 10882 | return; |
| 10885 | 10883 | } |
| 10884 | |
| 10885 | const new_index = @intCast(Zir.Inst.Index, gz.astgen.instructions.len); |
| 10886 | try gz.astgen.instructions.append(gpa, .{ .tag = .extended, .data = .{ |
| 10887 | .extended = .{ .opcode = .dbg_block_end, .small = undefined, .operand = undefined }, |
| 10888 | } }); |
| 10889 | try gz.instructions.insert(gpa, gz.instructions.items.len - 1, new_index); |
| 10886 | 10890 | } |
| 10887 | 10891 | |
| 10888 | 10892 | /// Control flow does not fall through the "then" block of a loop; it continues |