fixes #2963
This commit is contained in:
parent
f192d5aab3
commit
862ee8d1d3
3 changed files with 18 additions and 4 deletions
|
|
@ -347,8 +347,8 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) =
|
||||||
else:
|
else:
|
||||||
useStringh(p.module)
|
useStringh(p.module)
|
||||||
linefmt(p, cpsStmts,
|
linefmt(p, cpsStmts,
|
||||||
"memcpy((void*)$1, (NIM_CONST void*)$2, sizeof($1));$n",
|
"memcpy((void*)$1, (NIM_CONST void*)$2, sizeof($3));$n",
|
||||||
rdLoc(dest), rdLoc(src))
|
rdLoc(dest), rdLoc(src), getTypeDesc(p.module, ty))
|
||||||
of tyOpenArray, tyVarargs:
|
of tyOpenArray, tyVarargs:
|
||||||
# open arrays are always on the stack - really? What if a sequence is
|
# open arrays are always on the stack - really? What if a sequence is
|
||||||
# passed to an open array?
|
# passed to an open array?
|
||||||
|
|
|
||||||
|
|
@ -1101,7 +1101,10 @@ proc genAsgn(p: BProc, e: PNode, fastAsgn: bool) =
|
||||||
genGotoVar(p, e.sons[1])
|
genGotoVar(p, e.sons[1])
|
||||||
elif not fieldDiscriminantCheckNeeded(p, e):
|
elif not fieldDiscriminantCheckNeeded(p, e):
|
||||||
var a: TLoc
|
var a: TLoc
|
||||||
initLocExpr(p, e.sons[0], a)
|
if e[0].kind in {nkDerefExpr, nkHiddenDeref}:
|
||||||
|
genDeref(p, e[0], a, enforceDeref=true)
|
||||||
|
else:
|
||||||
|
initLocExpr(p, e.sons[0], a)
|
||||||
if fastAsgn: incl(a.flags, lfNoDeepCopy)
|
if fastAsgn: incl(a.flags, lfNoDeepCopy)
|
||||||
assert(a.t != nil)
|
assert(a.t != nil)
|
||||||
loadInto(p, e.sons[0], e.sons[1], a)
|
loadInto(p, e.sons[0], e.sons[1], a)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
discard """
|
discard """
|
||||||
output: '''255
|
output: '''[10, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
|
||||||
|
255
|
||||||
1 1
|
1 1
|
||||||
0.5'''
|
0.5'''
|
||||||
"""
|
"""
|
||||||
|
|
@ -27,4 +29,13 @@ proc mainowar =
|
||||||
var b = p[]
|
var b = p[]
|
||||||
echo b[0]
|
echo b[0]
|
||||||
|
|
||||||
|
|
||||||
|
# bug 2963
|
||||||
|
var
|
||||||
|
a = [8, 7, 3, 10, 0, 0, 0, 1]
|
||||||
|
b = [10, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
ap = addr a
|
||||||
|
ap[] = b
|
||||||
|
echo repr(a)
|
||||||
|
|
||||||
mainowar()
|
mainowar()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue