| author | |
| committer | |
| log | f88b523065fbb8afbd723fd6e803ace0334b713c |
| tree | 38b1e58905d644ef83592db39b9b4e6402e30a68 |
| parent | 5bbacb0c8ce1aa59af5e898e255c544786059d06 |
| signature |
4 files changed, 28 insertions(+), 25 deletions(-)
src/Sema.zig+8-3| ... | @@ -1292,9 +1292,7 @@ fn analyzeBodyInner( | ... | @@ -1292,9 +1292,7 @@ fn analyzeBodyInner( |
| 1292 | continue; | 1292 | continue; |
| 1293 | }, | 1293 | }, |
| 1294 | .breakpoint => { | 1294 | .breakpoint => { |
| 1295 | if (!block.is_comptime) { | 1295 | try sema.zirBreakpoint(block, extended); |
| 1296 | _ = try block.addNoOp(.breakpoint); | ||
| 1297 | } | ||
| 1298 | i += 1; | 1296 | i += 1; |
| 1299 | continue; | 1297 | continue; |
| 1300 | }, | 1298 | }, |
| ... | @@ -5620,6 +5618,13 @@ fn zirTrap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Zir.In | ... | @@ -5620,6 +5618,13 @@ fn zirTrap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Zir.In |
| 5620 | return always_noreturn; | 5618 | return always_noreturn; |
| 5621 | } | 5619 | } |
| 5622 | 5620 | ||
| 5621 | fn zirBreakpoint(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!void { | ||
| 5622 | const src = LazySrcLoc.nodeOffset(@bitCast(extended.operand)); | ||
| 5623 | if (block.is_comptime) | ||
| 5624 | return sema.fail(block, src, "encountered @breakpoint at comptime", .{}); | ||
| 5625 | _ = try block.addNoOp(.breakpoint); | ||
| 5626 | } | ||
| 5627 | |||
| 5623 | fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { | 5628 | fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| 5624 | const tracy = trace(@src()); | 5629 | const tracy = trace(@src()); |
| 5625 | defer tracy.end(); | 5630 | defer tracy.end(); |
test/cases/compile_errors/@trap_comptime_call.zig deleted-9| ... | @@ -1,9 +0,0 @@ | ||
| 1 | export fn entry() void { | ||
| 2 | comptime @trap(); | ||
| 3 | } | ||
| 4 | |||
| 5 | // error | ||
| 6 | // backend=stage2 | ||
| 7 | // target=native | ||
| 8 | // | ||
| 9 | // :2:14: error: encountered @trap at comptime | ||
test/cases/compile_errors/panic_called_at_compile_time.zig deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | export fn entry() void { | ||
| 2 | comptime { | ||
| 3 | @panic( | ||
| 4 | "aoeu", | ||
| 5 | ); | ||
| 6 | } | ||
| 7 | } | ||
| 8 | |||
| 9 | // error | ||
| 10 | // backend=stage2 | ||
| 11 | // target=native | ||
| 12 | // | ||
| 13 | // :3:9: error: encountered @panic at comptime | ||
test/cases/compile_errors/runtime-only_builtins_called_at_comptime.zig created+20| ... | @@ -0,0 +1,20 @@ | ||
| 1 | test "comptime @panic call" { | ||
| 2 | comptime @panic("amogus"); | ||
| 3 | } | ||
| 4 | |||
| 5 | test "comptime @trap call" { | ||
| 6 | comptime @trap(); | ||
| 7 | } | ||
| 8 | |||
| 9 | test "comptime @breakpoint call" { | ||
| 10 | comptime @breakpoint(); | ||
| 11 | } | ||
| 12 | |||
| 13 | // error | ||
| 14 | // backend=stage2 | ||
| 15 | // target=native | ||
| 16 | // is_test=true | ||
| 17 | // | ||
| 18 | // :2:14: error: encountered @panic at comptime | ||
| 19 | // :6:14: error: encountered @trap at comptime | ||
| 20 | // :10:14: error: encountered @breakpoint at comptime | ||