summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xcompiler/cgen.nim3
-rw-r--r--tests/run/tzeroarray.nim18
-rwxr-xr-xtodo.txt1
3 files changed, 22 insertions, 0 deletions
diff --git a/compiler/cgen.nim b/compiler/cgen.nim
index 6a5d890a8..5de2481ed 100755
--- a/compiler/cgen.nim
+++ b/compiler/cgen.nim
@@ -405,6 +405,9 @@ proc assignGlobalVar(p: BProc, s: PSym) =
     if sfRegister in s.flags: app(p.module.s[cfsVars], " register")
     if sfVolatile in s.flags: app(p.module.s[cfsVars], " volatile")
     appf(p.module.s[cfsVars], " $1;$n", [s.loc.r])
+  if p.withinLoop > 0:
+    # fixes tests/run/tzeroarray:
+    initLocalVar(p, s, false)
   if p.module.module.options * {optStackTrace, optEndb} ==
                                {optStackTrace, optEndb}: 
     appcg(p.module, p.module.s[cfsDebugInit], 
diff --git a/tests/run/tzeroarray.nim b/tests/run/tzeroarray.nim
new file mode 100644
index 000000000..7f66007b5
--- /dev/null
+++ b/tests/run/tzeroarray.nim
@@ -0,0 +1,18 @@
+discard """
+  output: 'done'
+"""
+
+for i in 0 .. 1:
+  var a: array[0..4, int]
+  if a[0] != 0: quit "bug"
+  a[0] = 6
+
+proc main =
+  for i in 0 .. 1:
+    var a: array[0..4, int]
+    if a[0] != 0: quit "bug"
+    a[0] = 6
+
+main()
+echo "done"
+
diff --git a/todo.txt b/todo.txt
index dc9f9c159..22a4c6d97 100755
--- a/todo.txt
+++ b/todo.txt
@@ -48,6 +48,7 @@ Bugs
   without ``-d:release`` leaks memory; good way to figure out how a 
   fixed amount of stack can hold an arbitrary number of GC roots!
 - bug: temp2.nim triggers weird compiler and except.nim bug
+- bug: negative array indexes fail to index check
 
 
 version 0.9.XX