aboutsummaryrefslogtreecommitdiff
path: root/typecheck.c
diff options
context:
space:
mode:
Diffstat (limited to 'typecheck.c')
-rw-r--r--typecheck.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/typecheck.c b/typecheck.c
index 217937ed..9964c9d9 100644
--- a/typecheck.c
+++ b/typecheck.c
@@ -948,7 +948,9 @@ type_t *get_type(env_t *env, ast_t *ast)
break;
}
}
- if (!any_unhandled)
+ // HACK: `while when ...` is handled by the parser adding an implicit
+ // `else: stop`, which has an empty source code span.
+ if (!any_unhandled && when->else_body->end > when->else_body->start)
code_err(when->else_body, "This 'else' block will never run because every tag is handled");
type_t *else_t = get_type(env, when->else_body);