parent
cc5140d8b6
commit
4f9f9ea528
2 changed files with 32 additions and 1 deletions
|
|
@ -317,8 +317,10 @@ proc resetLoc(p: BProc, loc: var TLoc) =
|
||||||
genObjectInit(p, cpsStmts, loc.t, loc, true)
|
genObjectInit(p, cpsStmts, loc.t, loc, true)
|
||||||
else:
|
else:
|
||||||
useStringh(p.module)
|
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",
|
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
|
# XXX: We can be extra clever here and call memset only
|
||||||
# on the bytes following the m_type field?
|
# on the bytes following the m_type field?
|
||||||
genObjectInit(p, cpsStmts, loc.t, loc, true)
|
genObjectInit(p, cpsStmts, loc.t, loc, true)
|
||||||
|
|
|
||||||
29
tests/ccgbugs/tresult_of_array.nim
Normal file
29
tests/ccgbugs/tresult_of_array.nim
Normal 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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue