From 4dceffd049d15286126d134573f22bdf9f698de6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 30 Mar 2026 11:50:59 +0100 Subject: [PATCH] When parsing an incorrect for loop, remove `assert` // caused by this: ``` for a b, c := d() ``` --- core/odin/parser/parser.odin | 7 ++++--- src/parser.cpp | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index 0f3ac78b2..b58635080 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -933,9 +933,10 @@ parse_for_stmt :: proc(p: ^Parser) -> ^ast.Stmt { next_token := peek_token(p) if next_token.kind == .In || next_token.kind == .Comma { cond = parse_simple_stmt(p, {.In}) - as := cond.derived_stmt.(^ast.Assign_Stmt) - assert(as.op.kind == .In) - is_range = true + if as, ok := cond.derived_stmt.(^ast.Assign_Stmt); ok { + assert(as.op.kind == .In) + is_range = true + } break general_conds } } diff --git a/src/parser.cpp b/src/parser.cpp index 584979064..8fe33d2b8 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -4951,8 +4951,9 @@ gb_internal Ast *parse_for_stmt(AstFile *f) { Token next_token = peek_token(f); if (next_token.kind == Token_in || next_token.kind == Token_Comma) { cond = parse_simple_stmt(f, StmtAllowFlag_In); - GB_ASSERT(cond->kind == Ast_AssignStmt && cond->AssignStmt.op.kind == Token_in); - is_range = true; + if (cond->kind == Ast_AssignStmt && cond->AssignStmt.op.kind == Token_in) { + is_range = true; + } goto range_skip; } }