summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xcompiler/ccgexprs.nim4
-rw-r--r--tests/reject/tinvalidarrayaccess.nim14
-rwxr-xr-xtools/niminst/buildsh.tmpl2
3 files changed, 19 insertions, 1 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim
index abdfbd613..5989d94b3 100755
--- a/compiler/ccgexprs.nim
+++ b/compiler/ccgexprs.nim
@@ -684,6 +684,10 @@ proc genArrayElem(p: BProc, e: PNode, d: var TLoc) =
       else:
         lineCg(p, cpsStmts, "if ($1 < $2 || $1 > $3) #raiseIndexError();$n",
              [rdCharLoc(b), first, intLiteral(lastOrd(ty))])
+    else:
+      let idx = getOrdValue(e.sons[1])
+      if idx < firstOrd(ty) or idx > lastOrd(ty):
+        localError(e.info, errIndexOutOfBounds)
   if d.k == locNone: d.s = a.s
   putIntoDest(p, d, elemType(skipTypes(ty, abstractVar)),
               ropef("$1[($2)- $3]", [rdLoc(a), rdCharLoc(b), first]))
diff --git a/tests/reject/tinvalidarrayaccess.nim b/tests/reject/tinvalidarrayaccess.nim
new file mode 100644
index 000000000..03105b41b
--- /dev/null
+++ b/tests/reject/tinvalidarrayaccess.nim
@@ -0,0 +1,14 @@
+discard """
+  errormsg: "index out of bounds"
+  line: 11
+"""
+
+
+type TTestArr = array[0..1, int16]
+var f: TTestArr
+f[0] = 30
+f[1] = 40
+f[2] = 50
+f[3] = 60
+
+echo(repr(f))
diff --git a/tools/niminst/buildsh.tmpl b/tools/niminst/buildsh.tmpl
index 05145e15c..70f21a691 100755
--- a/tools/niminst/buildsh.tmpl
+++ b/tools/niminst/buildsh.tmpl
@@ -81,7 +81,7 @@ case $uos in
 esac
 
 case $ucpu in
-  *i386* | *i486* | *i586* | *i686* | *bepc* ) 
+  *i386* | *i486* | *i586* | *i686* | *bepc* | *i86pc* ) 
     mycpu="i386" ;;
   *amd*64* | *x86-64* | *x86_64* ) 
     mycpu="amd64" ;;