* bounchecks for len(toOpenArray()) * add a testcase
This commit is contained in:
parent
a8090f7d65
commit
b83bd282dc
2 changed files with 20 additions and 0 deletions
|
|
@ -1879,9 +1879,13 @@ proc genArrayLen(p: BProc, e: PNode, d: var TLoc, op: TMagic) =
|
||||||
# Bug #9279, len(toOpenArray()) has to work:
|
# Bug #9279, len(toOpenArray()) has to work:
|
||||||
if a.kind in nkCallKinds and a[0].kind == nkSym and a[0].sym.magic == mSlice:
|
if a.kind in nkCallKinds and a[0].kind == nkSym and a[0].sym.magic == mSlice:
|
||||||
# magic: pass slice to openArray:
|
# magic: pass slice to openArray:
|
||||||
|
var m: TLoc
|
||||||
var b, c: TLoc
|
var b, c: TLoc
|
||||||
|
initLocExpr(p, a[1], m)
|
||||||
initLocExpr(p, a[2], b)
|
initLocExpr(p, a[2], b)
|
||||||
initLocExpr(p, a[3], c)
|
initLocExpr(p, a[3], c)
|
||||||
|
if optBoundsCheck in p.options:
|
||||||
|
genBoundsCheck(p, m, b, c)
|
||||||
if op == mHigh:
|
if op == mHigh:
|
||||||
putIntoDest(p, d, e, ropecg(p.module, "($2)-($1)", [rdLoc(b), rdLoc(c)]))
|
putIntoDest(p, d, e, ropecg(p.module, "($2)-($1)", [rdLoc(b), rdLoc(c)]))
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -22,3 +22,19 @@ block: # bug 18627
|
||||||
for i in params.toOpenArray(0, params.len - 1):
|
for i in params.toOpenArray(0, params.len - 1):
|
||||||
echo i
|
echo i
|
||||||
uciLoop2()
|
uciLoop2()
|
||||||
|
|
||||||
|
when defined(nimPreviewSlimSystem):
|
||||||
|
import std/assertions
|
||||||
|
|
||||||
|
block: # bug #20954
|
||||||
|
block:
|
||||||
|
doAssertRaises(IndexDefect):
|
||||||
|
var v: array[10, int]
|
||||||
|
|
||||||
|
echo len(toOpenArray(v, 20, 30))
|
||||||
|
|
||||||
|
block:
|
||||||
|
doAssertRaises(IndexDefect):
|
||||||
|
var v: seq[int]
|
||||||
|
|
||||||
|
echo len(toOpenArray(v, 20, 30))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue