aboutsummaryrefslogtreecommitdiff
path: root/src/check_stmt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_stmt.cpp')
-rw-r--r--src/check_stmt.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp
index 0ce0ff6a0..7d9eefe19 100644
--- a/src/check_stmt.cpp
+++ b/src/check_stmt.cpp
@@ -10,7 +10,19 @@ bool is_diverging_stmt(Ast *stmt) {
String name = expr->CallExpr.proc->BasicDirective.name;
return name == "panic";
}
- Type *t = type_of_expr(expr->CallExpr.proc);
+ Ast *proc = unparen_expr(expr->CallExpr.proc);
+ TypeAndValue tv = proc->tav;
+ if (tv.mode == Addressing_Builtin) {
+ Entity *e = entity_of_node(proc);
+ BuiltinProcId id = BuiltinProc_Invalid;
+ if (e != nullptr) {
+ id = cast(BuiltinProcId)e->Builtin.id;
+ } else {
+ id = BuiltinProc_DIRECTIVE;
+ }
+ return builtin_procs[id].diverging;
+ }
+ Type *t = tv.type;
t = base_type(t);
return t != nullptr && t->kind == Type_Proc && t->Proc.diverging;
}