This commit is contained in:
Araq 2015-07-22 01:21:42 +02:00
commit 862ee8d1d3
3 changed files with 18 additions and 4 deletions

View file

@ -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?

View file

@ -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)

View file

@ -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()