From f88b523065fbb8afbd723fd6e803ace0334b713c Mon Sep 17 00:00:00 2001 From: Bogdan Romanyuk <65823030+wrongnull@users.noreply.github.com> Date: Mon, 11 Dec 2023 18:52:19 +0300 Subject: [PATCH] Sema: forbid @breakpoint from being called at comptime --- src/Sema.zig | 11 +++++++--- .../compile_errors/@trap_comptime_call.zig | 9 --------- .../panic_called_at_compile_time.zig | 13 ------------ ...ntime-only_builtins_called_at_comptime.zig | 20 +++++++++++++++++++ 4 files changed, 28 insertions(+), 25 deletions(-) delete mode 100644 test/cases/compile_errors/@trap_comptime_call.zig delete mode 100644 test/cases/compile_errors/panic_called_at_compile_time.zig create mode 100644 test/cases/compile_errors/runtime-only_builtins_called_at_comptime.zig diff --git a/src/Sema.zig b/src/Sema.zig index 752a5b1023..160a531d92 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1292,9 +1292,7 @@ fn analyzeBodyInner( continue; }, .breakpoint => { - if (!block.is_comptime) { - _ = try block.addNoOp(.breakpoint); - } + try sema.zirBreakpoint(block, extended); i += 1; continue; }, @@ -5620,6 +5618,13 @@ fn zirTrap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Zir.In return always_noreturn; } +fn zirBreakpoint(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!void { + const src = LazySrcLoc.nodeOffset(@bitCast(extended.operand)); + if (block.is_comptime) + 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 tracy = trace(@src()); defer tracy.end(); diff --git a/test/cases/compile_errors/@trap_comptime_call.zig b/test/cases/compile_errors/@trap_comptime_call.zig deleted file mode 100644 index c6d0decf98..0000000000 --- a/test/cases/compile_errors/@trap_comptime_call.zig +++ /dev/null @@ -1,9 +0,0 @@ -export fn entry() void { - comptime @trap(); -} - -// error -// backend=stage2 -// target=native -// -// :2:14: error: encountered @trap at comptime diff --git a/test/cases/compile_errors/panic_called_at_compile_time.zig b/test/cases/compile_errors/panic_called_at_compile_time.zig deleted file mode 100644 index 8198cd8e5d..0000000000 --- a/test/cases/compile_errors/panic_called_at_compile_time.zig +++ /dev/null @@ -1,13 +0,0 @@ -export fn entry() void { - comptime { - @panic( - "aoeu", - ); - } -} - -// error -// backend=stage2 -// target=native -// -// :3:9: error: encountered @panic at comptime diff --git a/test/cases/compile_errors/runtime-only_builtins_called_at_comptime.zig b/test/cases/compile_errors/runtime-only_builtins_called_at_comptime.zig new file mode 100644 index 0000000000..382a7b01ec --- /dev/null +++ b/test/cases/compile_errors/runtime-only_builtins_called_at_comptime.zig @@ -0,0 +1,20 @@ +test "comptime @panic call" { + comptime @panic("amogus"); +} + +test "comptime @trap call" { + comptime @trap(); +} + +test "comptime @breakpoint call" { + comptime @breakpoint(); +} + +// error +// backend=stage2 +// target=native +// is_test=true +// +// :2:14: error: encountered @panic at comptime +// :6:14: error: encountered @trap at comptime +// :10:14: error: encountered @breakpoint at comptime