From 34eff503265834172f89a8635e49e9f4d124db51 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 10 Apr 2017 03:00:19 -0400 Subject: [PATCH] fix for loops not working at compile-time closes #315 --- src/ir.cpp | 3 +-- test/cases/eval.zig | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/ir.cpp b/src/ir.cpp index 8aefb4b7bf..848eef09d4 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -8212,10 +8212,9 @@ static IrInstruction *ir_get_var_ptr(IrAnalyze *ira, IrInstruction *instruction, bool comptime_var_mem = ir_get_var_is_comptime(var); ConstExprValue *mem_slot = nullptr; - FnTableEntry *fn_entry = scope_fn_entry(var->parent_scope); if (var->value->special == ConstValSpecialStatic) { mem_slot = var->value; - } else if (fn_entry) { + } else { // TODO once the analyze code is fully ported over to IR we won't need this SIZE_MAX thing. if (var->mem_slot_index != SIZE_MAX && (comptime_var_mem || var->gen_is_const)) mem_slot = &ira->exec_context.mem_slot_list[var->mem_slot_index]; diff --git a/test/cases/eval.zig b/test/cases/eval.zig index 0d52985329..677feff48d 100644 --- a/test/cases/eval.zig +++ b/test/cases/eval.zig @@ -299,3 +299,18 @@ const Foo = struct { var foo_contents = Foo { .name = "a", }; const foo_ref = &foo_contents; + + + +test "create global array with for loop" { + assert(global_array[5] == 5 * 5); + assert(global_array[9] == 9 * 9); +} + +const global_array = { + var result: [10]usize = undefined; + for (result) |*item, index| { + *item = index * index; + } + result +};