mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-07 12:24:19 +00:00
fixes #21043; fixes a named exception in the infixAs expression which generate an implicit uninitialized let statement (#21081)
* fixes #21043; fixes a named exception in the infixAs expression which generate an implicit uninitialized let statement * Update compiler/sempass2.nim Co-authored-by: Andreas Rumpf <rumpf_a@web.de> Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
This commit is contained in:
@@ -491,6 +491,10 @@ proc trackTryStmt(tracked: PEffects, n: PNode) =
|
||||
let b = n[i]
|
||||
if b.kind == nkExceptBranch:
|
||||
setLen(tracked.init, oldState)
|
||||
for j in 0..<b.len - 1:
|
||||
if b[j].isInfixAs(): # skips initialization checks
|
||||
assert(b[j][2].kind == nkSym)
|
||||
tracked.init.add b[j][2].sym.id
|
||||
track(tracked, b[^1])
|
||||
for i in oldState..<tracked.init.len:
|
||||
addToIntersection(inter, tracked.init[i])
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
proc bar(x: out string) =
|
||||
x = "abc"
|
||||
|
||||
template moe = # bug #21043
|
||||
try:
|
||||
discard
|
||||
except ValueError as e:
|
||||
echo(e.msg)
|
||||
|
||||
template moe0 {.dirty.} = # bug #21043
|
||||
try:
|
||||
discard
|
||||
except ValueError as e:
|
||||
echo(e.msg)
|
||||
|
||||
proc foo() =
|
||||
block:
|
||||
let x: string
|
||||
@@ -25,10 +37,19 @@ proc foo() =
|
||||
discard "def"
|
||||
doAssert x == "abc"
|
||||
block: #
|
||||
let x: int
|
||||
let x {.used.} : int
|
||||
block: #
|
||||
let x: float
|
||||
x = 1.234
|
||||
doAssert x == 1.234
|
||||
|
||||
block:
|
||||
try:
|
||||
discard
|
||||
except ValueError as e:
|
||||
echo(e.msg)
|
||||
moe()
|
||||
moe0()
|
||||
|
||||
static: foo()
|
||||
foo()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
discard """
|
||||
matrix: "; --experimental:strictdefs"
|
||||
targets: "c cpp"
|
||||
"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user