mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
Fix handling of reraise in effect tracking (#10582)
This is the MVP in order not to get a completely useless error message from the compiler. Fixes #10579
This commit is contained in:
@@ -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
|
||||
|
||||
12
tests/effects/teffects8.nim
Normal file
12
tests/effects/teffects8.nim
Normal file
@@ -0,0 +1,12 @@
|
||||
discard """
|
||||
errormsg: "can raise an unlisted exception: Exception"
|
||||
line: 10
|
||||
"""
|
||||
|
||||
proc foo() {.raises: [].} =
|
||||
try:
|
||||
discard
|
||||
except ValueError:
|
||||
raise
|
||||
|
||||
foo()
|
||||
Reference in New Issue
Block a user