diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2020-01-15 22:13:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-15 22:13:31 +0100 |
commit | a5e67071d27a33c7f19d739a6918e9e16b44e4ab (patch) | |
tree | 27360358bdd415011b27357c44c96f11299b596b /compiler/injectdestructors.nim | |
parent | d88b52c0bc505db42ba6561518c9ee9b21a99e81 (diff) | |
download | Nim-a5e67071d27a33c7f19d739a6918e9e16b44e4ab.tar.gz |
ARC: misc bugfixes (#13156)
* fixes #13102 * closes #13149 * ARC: fixes a move optimizer bug (there are more left regarding array and tuple indexing) * proper fix; fixes #12957 * fixes yet another case object '=' code generation problem
Diffstat (limited to 'compiler/injectdestructors.nim')
-rw-r--r-- | compiler/injectdestructors.nim | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index f5e525e00..080da1715 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -673,7 +673,8 @@ proc moveOrCopy(dest, ri: PNode; c: var Con): PNode = if isUnpackedTuple(ri[0]): # unpacking of tuple: take over elements result = newTree(nkFastAsgn, dest, p(ri, c, consumed)) - elif isAnalysableFieldAccess(ri, c.owner) and isLastRead(ri, c): + elif isAnalysableFieldAccess(ri, c.owner) and isLastRead(ri, c) and + not aliases(dest, ri): # Rule 3: `=sink`(x, z); wasMoved(z) var snk = genSink(c, dest, ri) snk.add ri |