diff options
Diffstat (limited to 'tests/gc/stackrefleak.nim')
-rw-r--r-- | tests/gc/stackrefleak.nim | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/gc/stackrefleak.nim b/tests/gc/stackrefleak.nim new file mode 100644 index 000000000..2c652d6bf --- /dev/null +++ b/tests/gc/stackrefleak.nim @@ -0,0 +1,33 @@ +discard """ + outputsub: "no leak: " +""" + +type + Cyclic = object + sibling: PCyclic + data: array[0..200, char] + + PCyclic = ref Cyclic + +proc makePair: PCyclic = + new(result) + new(result.sibling) + result.sibling.sibling = result + +proc loop = + for i in 0..10000: + var x = makePair() + GC_fullCollect() + x = nil + GC_fullCollect() + + if getOccupiedMem() > 300_000: + echo "still a leak! ", getOccupiedMem() + quit(1) + else: + echo "no leak: ", getOccupiedMem() + +loop() + + + |