
# Program to detect bug #1796 reliably

type
  Node = ref object
    a, b: Node
    leaf: string

proc createCycle(leaf: string): Node =
  new result
  result.a = result
  shallowCopy result.leaf, leaf

proc main =
  for i in 0 .. 100_000:
    var leaf = "this is the leaf. it allocates"
    let x = createCycle(leaf)
    let y = createCycle(leaf)
  echo "done ", getOccupiedMem()

main()
