This commit is contained in:
Andreas Rumpf
2020-03-09 18:12:52 +01:00
committed by GitHub
parent 63af8ae53c
commit ec5cef13cf
2 changed files with 40 additions and 1 deletions

View File

@@ -1115,10 +1115,10 @@ proc genTryGoto(p: BProc; t: PNode; d: var TLoc) =
# 3. finally is run for exception handling code without any 'except'
# handler present or only handlers that did not match.
linefmt(p, cpsStmts, "*nimErr_ += oldNimErr$1_ + (*nimErr_ - oldNimErrFin$1_); oldNimErr$1_ = 0;$n", [lab])
raiseExit(p)
endBlock(p)
# restore the real error value:
linefmt(p, cpsStmts, "*nimErr_ += oldNimErr$1_;$n", [lab])
if p.prc != nil: raiseExit(p)
proc genTrySetjmp(p: BProc, t: PNode, d: var TLoc) =
# code to generate:

View File

@@ -0,0 +1,39 @@
discard """
output: '''
before
swallowed
before
swallowed B
'''
cmd: "nim c --gc:arc --exceptions:goto $file"
"""
# bug #13599
proc main() =
try:
echo "before"
raise newException(CatchableError, "foo")
except AssertionError:
echo "caught"
echo "after"
try:
main()
except:
echo "swallowed"
proc mainB() =
try:
echo "before"
raise newException(CatchableError, "foo")
# except CatchableError: # would work
except AssertionError:
echo "caught"
except:
raise
echo "after"
try:
mainB()
except:
echo "swallowed B"