summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/sempass2.nim4
-rw-r--r--tests/init/tlet.nim23
-rw-r--r--tests/iter/tyieldintry.nim1
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"
 """