mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-12 06:18:51 +00:00
* test CI * fixes #19457 * add comments Co-authored-by: sandytypical <43030857+xflywind@users.noreply.github.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
16
tests/arc/t19457.nim
Normal file
16
tests/arc/t19457.nim
Normal file
@@ -0,0 +1,16 @@
|
||||
discard """
|
||||
matrix: "--gc:refc; --gc:arc"
|
||||
"""
|
||||
|
||||
# bug #19457
|
||||
proc gcd(x, y: seq[int]): seq[int] =
|
||||
var
|
||||
a = x
|
||||
b = y
|
||||
while b[0] > 0:
|
||||
let c = @[a[0] mod b[0]]
|
||||
a = b
|
||||
b = c
|
||||
return a
|
||||
|
||||
doAssert gcd(@[1], @[2]) == @[1]
|
||||
@@ -5,21 +5,28 @@ discard """
|
||||
|
||||
var
|
||||
it_cursor
|
||||
jt_cursor
|
||||
it_cursor = root
|
||||
block :tmp:
|
||||
while (
|
||||
not (it_cursor == nil)):
|
||||
echo [it_cursor.s]
|
||||
it_cursor = it_cursor.ri
|
||||
jt_cursor = root
|
||||
block :tmp_1:
|
||||
while (
|
||||
not (jt_cursor == nil)):
|
||||
var ri_1_cursor
|
||||
ri_1_cursor = jt_cursor.ri
|
||||
echo [jt_cursor.s]
|
||||
jt_cursor = ri_1_cursor
|
||||
jt
|
||||
try:
|
||||
it_cursor = root
|
||||
block :tmp:
|
||||
while (
|
||||
not (it_cursor == nil)):
|
||||
echo [it_cursor.s]
|
||||
it_cursor = it_cursor.ri
|
||||
`=copy`(jt, root)
|
||||
block :tmp_1:
|
||||
while (
|
||||
not (jt == nil)):
|
||||
var ri_1
|
||||
try:
|
||||
`=copy`(ri_1, jt.ri)
|
||||
echo [jt.s]
|
||||
`=sink`(jt, ri_1)
|
||||
wasMoved(ri_1)
|
||||
finally:
|
||||
`=destroy`(ri_1)
|
||||
finally:
|
||||
`=destroy`(jt)
|
||||
-- end of expandArc ------------------------'''
|
||||
"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user