mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
* bounchecks for len(toOpenArray()) * add a testcase
This commit is contained in:
@@ -1879,9 +1879,13 @@ proc genArrayLen(p: BProc, e: PNode, d: var TLoc, op: TMagic) =
|
||||
# Bug #9279, len(toOpenArray()) has to work:
|
||||
if a.kind in nkCallKinds and a[0].kind == nkSym and a[0].sym.magic == mSlice:
|
||||
# magic: pass slice to openArray:
|
||||
var m: TLoc
|
||||
var b, c: TLoc
|
||||
initLocExpr(p, a[1], m)
|
||||
initLocExpr(p, a[2], b)
|
||||
initLocExpr(p, a[3], c)
|
||||
if optBoundsCheck in p.options:
|
||||
genBoundsCheck(p, m, b, c)
|
||||
if op == mHigh:
|
||||
putIntoDest(p, d, e, ropecg(p.module, "($2)-($1)", [rdLoc(b), rdLoc(c)]))
|
||||
else:
|
||||
|
||||
@@ -22,3 +22,19 @@ block: # bug 18627
|
||||
for i in params.toOpenArray(0, params.len - 1):
|
||||
echo i
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user