diff --git a/releasenotes.md b/releasenotes.md index 059f6ecba..de5f339fc 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -43,6 +43,7 @@ - Assert when the binary doesn't get created and --run-once is used. #2502 - Prevent `foo.bar = {}` when `bar` is a flexible array member. #2497 - Fix several issues relating to multi-level inference like `int[*][*]` #2505 +- `$for int $a = 1; $a < 2; $a++` would not parse. ### Stdlib changes - Added generic `InterfaceList` to store a list of values that implement a specific interface diff --git a/src/compiler/parse_expr.c b/src/compiler/parse_expr.c index 5578be90e..da440d8c4 100644 --- a/src/compiler/parse_expr.c +++ b/src/compiler/parse_expr.c @@ -595,7 +595,7 @@ Expr *parse_ct_expression_list(ParseContext *c, bool allow_decl) } else { - ASSIGN_EXPR_OR_RET(expr, parse_expr(c), poisoned_expr); + ASSIGN_EXPR_OR_RET(expr, parse_decl_or_expr(c), poisoned_expr); } vec_add(expr_list->expression_list, expr); if (!try_consume(c, TOKEN_COMMA)) break; diff --git a/test/test_suite/compile_time/ct_for_typed.c3t b/test/test_suite/compile_time/ct_for_typed.c3t new file mode 100644 index 000000000..89dff08cd --- /dev/null +++ b/test/test_suite/compile_time/ct_for_typed.c3t @@ -0,0 +1,118 @@ +// #target: macos-x64 +module test; +import std; +fn void main() +{ + int a; + $for int $a = 123; $a < 222; $a++: + a = $a; + $endfor +} + +/* #expect: test.ll + +define void @test.main() #0 { +entry: + %a = alloca i32, align 4 + store i32 0, ptr %a, align 4 + store i32 123, ptr %a, align 4 + store i32 124, ptr %a, align 4 + store i32 125, ptr %a, align 4 + store i32 126, ptr %a, align 4 + store i32 127, ptr %a, align 4 + store i32 128, ptr %a, align 4 + store i32 129, ptr %a, align 4 + store i32 130, ptr %a, align 4 + store i32 131, ptr %a, align 4 + store i32 132, ptr %a, align 4 + store i32 133, ptr %a, align 4 + store i32 134, ptr %a, align 4 + store i32 135, ptr %a, align 4 + store i32 136, ptr %a, align 4 + store i32 137, ptr %a, align 4 + store i32 138, ptr %a, align 4 + store i32 139, ptr %a, align 4 + store i32 140, ptr %a, align 4 + store i32 141, ptr %a, align 4 + store i32 142, ptr %a, align 4 + store i32 143, ptr %a, align 4 + store i32 144, ptr %a, align 4 + store i32 145, ptr %a, align 4 + store i32 146, ptr %a, align 4 + store i32 147, ptr %a, align 4 + store i32 148, ptr %a, align 4 + store i32 149, ptr %a, align 4 + store i32 150, ptr %a, align 4 + store i32 151, ptr %a, align 4 + store i32 152, ptr %a, align 4 + store i32 153, ptr %a, align 4 + store i32 154, ptr %a, align 4 + store i32 155, ptr %a, align 4 + store i32 156, ptr %a, align 4 + store i32 157, ptr %a, align 4 + store i32 158, ptr %a, align 4 + store i32 159, ptr %a, align 4 + store i32 160, ptr %a, align 4 + store i32 161, ptr %a, align 4 + store i32 162, ptr %a, align 4 + store i32 163, ptr %a, align 4 + store i32 164, ptr %a, align 4 + store i32 165, ptr %a, align 4 + store i32 166, ptr %a, align 4 + store i32 167, ptr %a, align 4 + store i32 168, ptr %a, align 4 + store i32 169, ptr %a, align 4 + store i32 170, ptr %a, align 4 + store i32 171, ptr %a, align 4 + store i32 172, ptr %a, align 4 + store i32 173, ptr %a, align 4 + store i32 174, ptr %a, align 4 + store i32 175, ptr %a, align 4 + store i32 176, ptr %a, align 4 + store i32 177, ptr %a, align 4 + store i32 178, ptr %a, align 4 + store i32 179, ptr %a, align 4 + store i32 180, ptr %a, align 4 + store i32 181, ptr %a, align 4 + store i32 182, ptr %a, align 4 + store i32 183, ptr %a, align 4 + store i32 184, ptr %a, align 4 + store i32 185, ptr %a, align 4 + store i32 186, ptr %a, align 4 + store i32 187, ptr %a, align 4 + store i32 188, ptr %a, align 4 + store i32 189, ptr %a, align 4 + store i32 190, ptr %a, align 4 + store i32 191, ptr %a, align 4 + store i32 192, ptr %a, align 4 + store i32 193, ptr %a, align 4 + store i32 194, ptr %a, align 4 + store i32 195, ptr %a, align 4 + store i32 196, ptr %a, align 4 + store i32 197, ptr %a, align 4 + store i32 198, ptr %a, align 4 + store i32 199, ptr %a, align 4 + store i32 200, ptr %a, align 4 + store i32 201, ptr %a, align 4 + store i32 202, ptr %a, align 4 + store i32 203, ptr %a, align 4 + store i32 204, ptr %a, align 4 + store i32 205, ptr %a, align 4 + store i32 206, ptr %a, align 4 + store i32 207, ptr %a, align 4 + store i32 208, ptr %a, align 4 + store i32 209, ptr %a, align 4 + store i32 210, ptr %a, align 4 + store i32 211, ptr %a, align 4 + store i32 212, ptr %a, align 4 + store i32 213, ptr %a, align 4 + store i32 214, ptr %a, align 4 + store i32 215, ptr %a, align 4 + store i32 216, ptr %a, align 4 + store i32 217, ptr %a, align 4 + store i32 218, ptr %a, align 4 + store i32 219, ptr %a, align 4 + store i32 220, ptr %a, align 4 + store i32 221, ptr %a, align 4 + ret void +} \ No newline at end of file