diff options
Diffstat (limited to 'tests/gc/stackrefleak.nim')
-rw-r--r-- | tests/gc/stackrefleak.nim | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/gc/stackrefleak.nim b/tests/gc/stackrefleak.nim new file mode 100644 index 000000000..7f3fbff43 --- /dev/null +++ b/tests/gc/stackrefleak.nim @@ -0,0 +1,32 @@ +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) + when not defined(gcDestructors): + 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() + |