diff --git a/compiler/sempass2.nim b/compiler/sempass2.nim index 76c3d5290b5df..a8dfb57854ce8 100644 --- a/compiler/sempass2.nim +++ b/compiler/sempass2.nim @@ -1301,7 +1301,10 @@ proc track(tracked: PEffects, n: PNode) = let last = lastSon(child) track(tracked, last) of nkCaseStmt: trackCase(tracked, n) - of nkWhen, nkIfStmt, nkIfExpr: trackIf(tracked, n) + of nkWhen: # This should be a "when nimvm" node. + track(tracked, n[0][1]) + track(tracked, n[1][0]) + of nkIfStmt, nkIfExpr: trackIf(tracked, n) of nkBlockStmt, nkBlockExpr: trackBlock(tracked, n[1]) of nkWhileStmt: # 'while true' loop? diff --git a/tests/init/tlet.nim b/tests/init/tlet.nim index e32bedb1841ed..a3041baf876d2 100644 --- a/tests/init/tlet.nim +++ b/tests/init/tlet.nim @@ -1,3 +1,7 @@ +discard """ + joinable: false +""" + {.experimental: "strictDefs".} proc bar(x: out string) = @@ -53,3 +57,29 @@ proc foo() = static: foo() foo() + +proc foo2 = + when nimvm: + discard + else: + let x = 1 + doAssert x == 1 + + when false: + discard + else: + let y = 2 + + doAssert y == 2 + + const e = 1 + when e == 0: + discard + elif e == 1: + let z = 3 + else: + discard + + doAssert z == 3 + +foo2()