discard """
  output: '''A
B
X
inner finally
Y
outer finally
msg1
msg2
finally2
finally1'''
  cmd: "nim c --gc:arc $file"
"""

# bug #13668

proc main =
  try:
    try:
      raise newException(IOError, "IOError")

    except:
      echo "A"
      raise newException(CatchableError, "CatchableError")

  except:
    echo "B"
    #discard

proc mainB =
  try:
    try:
      raise newException(IOError, "IOError")

    except:
      echo "X"
      raise newException(CatchableError, "CatchableError")
    finally:
      echo "inner finally"

  except:
    echo "Y"
    #discard
  finally:
    echo "outer finally"

main()
mainB()

when true:
  #bug 7204
  proc nested_finally =
    try:
      raise newException(KeyError, "msg1")
    except KeyError as ex:
      echo ex.msg
      try:
        # pop exception
        raise newException(ValueError, "msg2") # push: exception stack (1 entry)
      except:
        echo getCurrentExceptionMsg()
        # pop exception (except)
      finally:
        echo "finally2"
      # pop exception (except KeyError as ex)
    finally:
      echo "finally1"

  nested_finally()
