fixes move analyser; refs #11257

This commit is contained in:
Araq 2019-05-24 00:12:36 +02:00
commit b75ad05267
2 changed files with 17 additions and 5 deletions

View file

@ -178,13 +178,13 @@ proc isLastRead(location: PNode; c: var Con; pc, comesFrom: int): int =
pc = pc + c.g[pc].dest pc = pc + c.g[pc].dest
of fork: of fork:
# every branch must lead to the last read of the location: # every branch must lead to the last read of the location:
var variantA = isLastRead(location, c, pc+1, pc) let variantA = isLastRead(location, c, pc+1, pc)
if variantA < 0: return -1 if variantA < 0: return -1
let variantB = isLastRead(location, c, pc + c.g[pc].dest, pc) var variantB = isLastRead(location, c, pc + c.g[pc].dest, pc)
if variantB < 0: return -1 if variantB < 0: return -1
elif variantA == high(int): elif variantB == high(int):
variantA = variantB variantB = variantA
pc = variantA pc = variantB
of InstrKind.join: of InstrKind.join:
let dest = pc + c.g[pc].dest let dest = pc + c.g[pc].dest
if dest == comesFrom: return pc + 1 if dest == comesFrom: return pc + 1

View file

@ -0,0 +1,12 @@
discard """
cmd: "nim c --newruntime $file"
errormsg: "sink parameter `a` is already consumed at tconsume_twice.nim(8, 6)"
line: 10
"""
proc consumeTwice(a: owned proc()): owned proc() =
if a == nil:
return
return a
assert consumeTwice(proc() = discard) != nil