aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig18
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" => {