Browse Source

Merge pull request #3383 from oskarnp/or_return_crash

Fix checker crash when or_return used for non-existing proc
gingerBill 1 year ago
parent
commit
f72e3f689b
1 changed files with 3 additions and 3 deletions
  1. 3 3
      src/check_stmt.cpp

+ 3 - 3
src/check_stmt.cpp

@@ -2075,13 +2075,13 @@ gb_internal void check_expr_stmt(CheckerContext *ctx, Ast *node) {
 	}
 	}
 
 
 	Ast *expr = strip_or_return_expr(operand.expr);
 	Ast *expr = strip_or_return_expr(operand.expr);
-	if (expr->kind == Ast_CallExpr) {
+	if (expr && expr->kind == Ast_CallExpr) {
 		BuiltinProcId builtin_id = BuiltinProc_Invalid;
 		BuiltinProcId builtin_id = BuiltinProc_Invalid;
 		bool do_require = false;
 		bool do_require = false;
 
 
 		AstCallExpr *ce = &expr->CallExpr;
 		AstCallExpr *ce = &expr->CallExpr;
 		Type *t = base_type(type_of_expr(ce->proc));
 		Type *t = base_type(type_of_expr(ce->proc));
-		if (t->kind == Type_Proc) {
+		if (t && t->kind == Type_Proc) {
 			do_require = t->Proc.require_results;
 			do_require = t->Proc.require_results;
 		} else if (check_stmt_internal_builtin_proc_id(ce->proc, &builtin_id)) {
 		} else if (check_stmt_internal_builtin_proc_id(ce->proc, &builtin_id)) {
 			auto const &bp = builtin_procs[builtin_id];
 			auto const &bp = builtin_procs[builtin_id];
@@ -2093,7 +2093,7 @@ gb_internal void check_expr_stmt(CheckerContext *ctx, Ast *node) {
 			gb_string_free(expr_str);
 			gb_string_free(expr_str);
 		}
 		}
 		return;
 		return;
-	} else if (expr->kind == Ast_SelectorCallExpr) {
+	} else if (expr && expr->kind == Ast_SelectorCallExpr) {
 		BuiltinProcId builtin_id = BuiltinProc_Invalid;
 		BuiltinProcId builtin_id = BuiltinProc_Invalid;
 		bool do_require = false;
 		bool do_require = false;