summary refs log tree commit diff stats
path: root/tests/gc/stackrefleak.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gc/stackrefleak.nim')
-rw-r--r--tests/gc/stackrefleak.nim33
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()
+
+
+