Merge branch 'devel' of github.com:nim-lang/Nim into devel

This commit is contained in:
Andreas Rumpf
2018-03-16 15:44:46 +01:00
2 changed files with 32 additions and 1 deletions

View File

@@ -317,8 +317,10 @@ proc resetLoc(p: BProc, loc: var TLoc) =
genObjectInit(p, cpsStmts, loc.t, loc, true)
else:
useStringh(p.module)
# array passed as argument decayed into pointer, bug #7332
# so we use getTypeDesc here rather than rdLoc(loc)
linefmt(p, cpsStmts, "memset((void*)$1, 0, sizeof($2));$n",
addrLoc(loc), rdLoc(loc))
addrLoc(loc), getTypeDesc(p.module, loc.t))
# XXX: We can be extra clever here and call memset only
# on the bytes following the m_type field?
genObjectInit(p, cpsStmts, loc.t, loc, true)

View File

@@ -0,0 +1,29 @@
discard """
output: '''false
true
false
[false, false, false]
'''
"""
# bug #7332
# resetLoc generate incorrect memset code
# because of array passed as argument decaying into a pointer
import tables
const tableOfArray = {
"one": [true, false, false],
"two": [false, true, false],
"three": [false, false, true]
}.toTable()
for i in 0..2:
echo tableOfArray["two"][i]
var seqOfArray = @[
[true, false, false],
[false, true, false],
[false, false, true]
]
proc crashingProc*[B](t: seq[B], index: Natural): B =
discard
echo seqOfArray.crashingProc(0)