diff --git a/compiler/sempass2.nim b/compiler/sempass2.nim index bf1b00aa0a..b453971c2c 100644 --- a/compiler/sempass2.nim +++ b/compiler/sempass2.nim @@ -721,11 +721,17 @@ proc track(tracked: PEffects, n: PNode) = of nkSym: useVar(tracked, n) of nkRaiseStmt: - n.sons[0].info = n.info - #throws(tracked.exc, n.sons[0]) - addEffect(tracked, n.sons[0], useLineInfo=false) - for i in 0 ..< safeLen(n): - track(tracked, n.sons[i]) + if n[0].kind != nkEmpty: + n.sons[0].info = n.info + #throws(tracked.exc, n.sons[0]) + addEffect(tracked, n.sons[0], useLineInfo=false) + for i in 0 ..< safeLen(n): + track(tracked, n.sons[i]) + else: + # A `raise` with no arguments means we're going to re-raise the exception + # being handled or, if outside of an `except` block, a `ReraiseError`. + # Here we add a `Exception` tag in order to cover both the cases. + addEffect(tracked, createRaise(tracked.graph, n)) of nkCallKinds: if getConstExpr(tracked.owner_module, n, tracked.graph) != nil: return diff --git a/tests/effects/teffects8.nim b/tests/effects/teffects8.nim new file mode 100644 index 0000000000..fb3c088d6c --- /dev/null +++ b/tests/effects/teffects8.nim @@ -0,0 +1,12 @@ +discard """ + errormsg: "can raise an unlisted exception: Exception" + line: 10 +""" + +proc foo() {.raises: [].} = + try: + discard + except ValueError: + raise + +foo()