diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-07-26 16:20:38 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-07-29 10:08:35 +0300 |
| commit | 9e0a930ce3be01923602adbfee13b50842da08b7 (patch) | |
| tree | f48fa98efd8c6d75cf431fa3c10e231e3688d0ff /src/Sema.zig | |
| parent | b5861193e072ba6780730a559f2b879378b8587f (diff) | |
| download | zig-9e0a930ce3be01923602adbfee13b50842da08b7.tar.gz zig-9e0a930ce3be01923602adbfee13b50842da08b7.zip | |
stage2: add error for comptime control flow in runtime block
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index ac9e24a9be..5a70679b8d 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1146,6 +1146,24 @@ fn analyzeBodyInner( i += 1; continue; }, + .check_comptime_control_flow => { + if (!block.is_comptime) { + if (block.runtime_cond orelse block.runtime_loop) |runtime_src| { + const inst_data = sema.code.instructions.items(.data)[inst].node; + const src = LazySrcLoc.nodeOffset(inst_data); + const msg = msg: { + const msg = try sema.errMsg(block, src, "comptime control flow inside runtime block", .{}); + errdefer msg.destroy(sema.gpa); + + try sema.errNote(block, runtime_src, msg, "runtime control flow here", .{}); + break :msg msg; + }; + return sema.failWithOwnedErrorMsg(block, msg); + } + } + i += 1; + continue; + }, // Special case instructions to handle comptime control flow. .@"break" => { |
