diff --git a/src/Sema.zig b/src/Sema.zig index 93b27844bce6b764a473c3b1d618e41e93a8cda2..569787f6a1e6293d31dd9f9ae7d4697f0ada563a 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1443,9 +1443,7 @@ fn analyzeBodyInner( continue; }, .breakpoint => { - if (!block.isComptime()) { - _ = try block.addNoOp(.breakpoint); - } + try sema.zirBreakpoint(block, extended); i += 1; continue; }, @@ -5082,6 +5080,14 @@ fn zirTrap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void { _ = try block.addNoOp(.trap); } +fn zirBreakpoint(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!void { + const src_node: std.zig.Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand))); + const src = block.nodeOffset(src_node); + if (block.isComptime()) + return sema.fail(block, src, "encountered @breakpoint at comptime", .{}); + _ = try block.addNoOp(.breakpoint); +} + fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const pt = sema.pt; const zcu = pt.zcu; diff --git a/test/cases/compile_errors/@breakpoint_comptime_call.zig b/test/cases/compile_errors/@breakpoint_comptime_call.zig new file mode 100644 index 0000000000000000000000000000000000000000..7183e83dc9a2bb414ef1ddd751f090cd20ada798 --- /dev/null +++ b/test/cases/compile_errors/@breakpoint_comptime_call.zig @@ -0,0 +1,7 @@ +export fn entry() void { + comptime @breakpoint(); +} + +// error +// +// :2:14: error: encountered @breakpoint at comptime