diff options
-rw-r--r-- | compiler/sempass2.nim | 4 | ||||
-rw-r--r-- | tests/init/tlet.nim | 23 | ||||
-rw-r--r-- | tests/iter/tyieldintry.nim | 1 |
3 files changed, 27 insertions, 1 deletions
diff --git a/compiler/sempass2.nim b/compiler/sempass2.nim index 4520609e3..f13d8d8d4 100644 --- a/compiler/sempass2.nim +++ b/compiler/sempass2.nim @@ -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]) diff --git a/tests/init/tlet.nim b/tests/init/tlet.nim index de0da23a6..e32bedb18 100644 --- a/tests/init/tlet.nim +++ b/tests/init/tlet.nim @@ -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() diff --git a/tests/iter/tyieldintry.nim b/tests/iter/tyieldintry.nim index 9df201dd4..47ba6efa6 100644 --- a/tests/iter/tyieldintry.nim +++ b/tests/iter/tyieldintry.nim @@ -1,4 +1,5 @@ discard """ + matrix: "; --experimental:strictdefs" targets: "c cpp" """ |