diff options
-rw-r--r-- | compiler/varpartitions.nim | 2 | ||||
-rw-r--r-- | tests/arc/topt_no_cursor.nim | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/compiler/varpartitions.nim b/compiler/varpartitions.nim index bbde68cbe..87424c4be 100644 --- a/compiler/varpartitions.nim +++ b/compiler/varpartitions.nim @@ -396,7 +396,7 @@ proc deps(c: var Partitions; dest, src: PNode) = (src.sym.kind in {skLet, skParam, skForVar} and hasDisabledAsgn(src.sym.typ))): c.s[vid].flags.incl preventCursor - if hasDestructor(src.typ): + if src.kind == nkSym and hasDestructor(src.typ): rhsIsSink(c, src) proc traverse(c: var Partitions; n: PNode) = diff --git a/tests/arc/topt_no_cursor.nim b/tests/arc/topt_no_cursor.nim index fe63e7585..8a33cb2ee 100644 --- a/tests/arc/topt_no_cursor.nim +++ b/tests/arc/topt_no_cursor.nim @@ -171,3 +171,24 @@ proc encodedQuery = elem.tt() encodedQuery() + +# bug #15147 + +proc s(input: string): (string, string) = + result = (";", "") + +proc charmatch(input: string): (string, string) = + result = ("123", input[0 .. input.high]) + +proc plus(input: string) = + var + lvalue, rvalue: string # cursors + lnext: string # must be cursor!!! + rnext: string # cursor + let lresult = charmatch(input) + (lvalue, lnext) = lresult + + let rresult = s(lnext) + (rvalue, rnext) = rresult + +plus("123;") |