summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/system/excpt.nim4
-rw-r--r--tests/destructor/tgotoexceptions4.nim40
2 files changed, 42 insertions, 2 deletions
diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim
index e241879c2..931f3f640 100644
--- a/lib/system/excpt.nim
+++ b/lib/system/excpt.nim
@@ -452,8 +452,8 @@ proc raiseExceptionAux(e: sink(ref Exception)) {.nodestroy.} =
     # XXX This check should likely also be done in the setjmp case below.
     if e != currException:
       pushCurrentException(e)
-      when gotoBasedExceptions:
-        inc nimInErrorMode
+    when gotoBasedExceptions:
+      inc nimInErrorMode
   else:
     if excHandler != nil:
       pushCurrentException(e)
diff --git a/tests/destructor/tgotoexceptions4.nim b/tests/destructor/tgotoexceptions4.nim
new file mode 100644
index 000000000..918169084
--- /dev/null
+++ b/tests/destructor/tgotoexceptions4.nim
@@ -0,0 +1,40 @@
+discard """
+  cmd: "nim c --gc:arc --exceptions:goto $file"
+  output: '''caught in gun
+caught in fun
+caughtsome msgMyExcept
+in finally
+caught1'''
+"""
+
+when true:
+  # bug #13070
+  type MyExcept = object of CatchableError
+  proc gun() =
+    try:
+      raise newException(MyExcept, "some msg")
+    except Exception as eab:
+      echo "caught in gun"
+      raise eab
+
+  proc fun() =
+    try:
+      gun()
+    except Exception as e:
+      echo "caught in fun"
+      echo("caught", e.msg, e.name)
+    finally:
+      echo "in finally"
+  fun()
+
+when true:
+  # bug #13072
+  type MyExceptB = object of CatchableError
+  proc gunB() =
+    raise newException(MyExceptB, "some msg")
+  proc funB() =
+    try:
+      gunB()
+    except CatchableError:
+      echo "caught1"
+  funB()