diff options
| author | gingerBill <bill@gingerbill.org> | 2021-03-13 15:01:23 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-03-13 15:01:23 +0000 |
| commit | 8123ff83a3ff7836a5abc7f28c63646f41a038e5 (patch) | |
| tree | 8c7fb26c1c8b2d08f4fc57a3fdaa7926423ea3cd /src/check_stmt.cpp | |
| parent | 4e2a2ac80a96115c51ec1bffa7a3c602bb0a1c2d (diff) | |
Fix `is_diverging_stmt` for invalid statements
Diffstat (limited to 'src/check_stmt.cpp')
| -rw-r--r-- | src/check_stmt.cpp | 8 |
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); |