fixes #10689
This commit is contained in:
parent
289b5e9ef9
commit
322ce1872f
2 changed files with 22 additions and 1 deletions
|
|
@ -796,7 +796,11 @@ proc p(n: PNode; c: var Con): PNode =
|
||||||
result = n
|
result = n
|
||||||
of nkAsgn, nkFastAsgn:
|
of nkAsgn, nkFastAsgn:
|
||||||
if hasDestructor(n[0].typ) and n[1].kind notin {nkProcDef, nkDo, nkLambda}:
|
if hasDestructor(n[0].typ) and n[1].kind notin {nkProcDef, nkDo, nkLambda}:
|
||||||
result = moveOrCopy(n[0], n[1], c)
|
# rule (self-assignment-removal):
|
||||||
|
if n[1].kind == nkSym and n[0].kind == nkSym and n[0].sym == n[1].sym:
|
||||||
|
result = newNodeI(nkEmpty, n.info)
|
||||||
|
else:
|
||||||
|
result = moveOrCopy(n[0], n[1], c)
|
||||||
else:
|
else:
|
||||||
result = copyNode(n)
|
result = copyNode(n)
|
||||||
recurse(n, result)
|
recurse(n, result)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ discard """
|
||||||
output: '''(field: "value")
|
output: '''(field: "value")
|
||||||
Indeed
|
Indeed
|
||||||
axc
|
axc
|
||||||
|
(v: 10)
|
||||||
0 new: 0'''
|
0 new: 0'''
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
@ -58,5 +59,21 @@ proc test(p: owned proc()) =
|
||||||
|
|
||||||
test(proc() = discard)
|
test(proc() = discard)
|
||||||
|
|
||||||
|
# bug #10689
|
||||||
|
|
||||||
|
type
|
||||||
|
O = object
|
||||||
|
v: int
|
||||||
|
|
||||||
|
proc `=sink`(d: var O, s: O) =
|
||||||
|
d.v = s.v
|
||||||
|
|
||||||
|
proc selfAssign =
|
||||||
|
var o = O(v: 10)
|
||||||
|
o = o
|
||||||
|
echo o
|
||||||
|
|
||||||
|
selfAssign()
|
||||||
|
|
||||||
let (a, d) = allocCounters()
|
let (a, d) = allocCounters()
|
||||||
discard cprintf("%ld new: %ld\n", a - unpairedEnvAllocs() - d, allocs)
|
discard cprintf("%ld new: %ld\n", a - unpairedEnvAllocs() - d, allocs)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue