discard """
  cmd: '''nim c --newruntime $file'''
  output: '''copied
copied
2
copied
copied
2
destroyed
destroyed'''
"""

type
  ObjWithDestructor = object
    a: int
proc `=destroy`(self: var ObjWithDestructor) =
  echo "destroyed"

proc `=`(self: var ObjWithDestructor, other: ObjWithDestructor) =
  echo "copied"

proc test(a: range[0..1], arg: ObjWithDestructor) =
  var iteration = 0
  while true:
    {.computedGoto.}

    let
      b = int(a) * 2
      c = a
      d = arg
      e = arg

    discard c
    discard d
    discard e

    inc iteration

    case a
    of 0:  
        assert false
    of 1:      
      echo b
      if iteration == 2:
        break

test(1, ObjWithDestructor())