This commit is contained in:
Araq
2019-08-12 14:06:48 +02:00
parent 289b5e9ef9
commit 322ce1872f
2 changed files with 22 additions and 1 deletions

View File

@@ -796,7 +796,11 @@ proc p(n: PNode; c: var Con): PNode =
result = n
of nkAsgn, nkFastAsgn:
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:
result = copyNode(n)
recurse(n, result)

View File

@@ -3,6 +3,7 @@ discard """
output: '''(field: "value")
Indeed
axc
(v: 10)
0 new: 0'''
"""
@@ -58,5 +59,21 @@ proc test(p: owned proc()) =
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()
discard cprintf("%ld new: %ld\n", a - unpairedEnvAllocs() - d, allocs)