fixes #19457 seqs are not properly updated in loop with ARC/ORC (#19922)

* test CI

* fixes #19457

* add comments

Co-authored-by: sandytypical <43030857+xflywind@users.noreply.github.com>
This commit is contained in:
ringabout 2022-09-28 19:12:08 +08:00 • committed by GitHub
commit fe8feb46c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 15 deletions

View file

@ -767,6 +767,11 @@ proc traverse(c: var Partitions; n: PNode) =
# mutate(graph)
# connect(graph, cursorVar)
for child in n: traverse(c, child)
if n.kind == nkWhileStmt:
traverse(c, n[0])
# variables in while condition has longer alive time than local variables
# in the while loop body
else:
for child in n: traverse(c, child)
@ -854,6 +859,11 @@ proc computeLiveRanges(c: var Partitions; n: PNode) =
inc c.inLoop
for child in n: computeLiveRanges(c, child)
dec c.inLoop
if n.kind == nkWhileStmt:
computeLiveRanges(c, n[0])
# variables in while condition has longer alive time than local variables
# in the while loop body
of nkElifBranch, nkElifExpr, nkElse, nkOfBranch:
inc c.inConditional
for child in n: computeLiveRanges(c, child)