aboutsummaryrefslogtreecommitdiff
path: root/src/check_stmt.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-03-13 15:01:23 +0000
committergingerBill <bill@gingerbill.org>2021-03-13 15:01:23 +0000
commit8123ff83a3ff7836a5abc7f28c63646f41a038e5 (patch)
tree8c7fb26c1c8b2d08f4fc57a3fdaa7926423ea3cd /src/check_stmt.cpp
parent4e2a2ac80a96115c51ec1bffa7a3c602bb0a1c2d (diff)
Fix `is_diverging_stmt` for invalid statements
Diffstat (limited to 'src/check_stmt.cpp')
-rw-r--r--src/check_stmt.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp
index a9c88d930..c539da99b 100644
--- a/src/check_stmt.cpp
+++ b/src/check_stmt.cpp
@@ -1,4 +1,4 @@
-bool is_divigering_stmt(Ast *stmt) {
+bool is_diverging_stmt(Ast *stmt) {
if (stmt->kind != Ast_ExprStmt) {
return false;
}
@@ -12,7 +12,7 @@ bool is_divigering_stmt(Ast *stmt) {
}
Type *t = type_of_expr(expr->CallExpr.proc);
t = base_type(t);
- return t->kind == Type_Proc && t->Proc.diverging;
+ return t != nullptr && t->kind == Type_Proc && t->Proc.diverging;
}
void check_stmt_list(CheckerContext *ctx, Slice<Ast *> const &stmts, u32 flags) {
@@ -69,7 +69,7 @@ void check_stmt_list(CheckerContext *ctx, Slice<Ast *> const &stmts, u32 flags)
break;
case Ast_ExprStmt:
- if (is_divigering_stmt(n)) {
+ if (is_diverging_stmt(n)) {
error(n, "Statements after a diverging procedure call are never executed");
}
break;
@@ -86,7 +86,7 @@ bool check_is_terminating_list(Slice<Ast *> const &stmts, String const &label) {
// Okay
} else if (stmt->kind == Ast_ValueDecl && !stmt->ValueDecl.is_mutable) {
// Okay
- } else if (is_divigering_stmt(stmt)) {
+ } else if (is_diverging_stmt(stmt)) {
return true;
} else {
return check_is_terminating(stmt, label);