fixes #14159 [backport:1.2]

(cherry picked from commit 87ac28d19a)
This commit is contained in:
Araq
2020-05-02 13:37:57 +02:00
committed by narimiran
parent 9ff2ec7ec5
commit a5d0950eb0
2 changed files with 37 additions and 1 deletions

View File

@@ -639,8 +639,10 @@ proc isAnalysableFieldAccess*(orig: PNode; owner: PSym): bool =
of nkHiddenDeref, nkDerefExpr:
# We "own" sinkparam[].loc but not ourVar[].location as it is a nasty
# pointer indirection.
# bug #14159, we cannot reason about sinkParam[].location as it can
# still be shared for tyRef.
n = n[0]
return n.kind == nkSym and n.sym.owner == owner and (isSinkParam(n.sym) or
return n.kind == nkSym and n.sym.owner == owner and (
n.sym.typ.skipTypes(abstractInst-{tyOwned}).kind in {tyOwned})
else:
break

View File

@@ -2,6 +2,8 @@ discard """
output: '''BEGIN
END
END 2
cpu.nes false
cpu step nes is nil? - false
0'''
cmd: '''nim c --gc:orc $file'''
"""
@@ -59,6 +61,38 @@ proc main =
c.run
echo "END 2"
# bug #14159
type
NES = ref object
cpu: CPU
apu: APU
CPU = ref object
nes: NES
APU = object
nes: NES
cpu: CPU
proc initAPU(nes: sink NES): APU {.nosinks.} =
result.nes = nes
result.cpu = nes.cpu
proc step(cpu: CPU): int =
echo "cpu.nes ", cpu.isNil
echo "cpu step nes is nil? - ", cpu.nes.isNil()
proc newNES(): NES =
new result
result.cpu = CPU(nes: result)
result.apu = initAPU(result)
proc bug14159 =
var nesConsole = newNES()
discard nesConsole.cpu.step()
let mem = getOccupiedMem()
main()
bug14159()
GC_fullCollect()
echo getOccupiedMem() - mem