diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 18b9a347b..1e3265eae 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -692,6 +692,12 @@ proc implicitIterator(c: PContext, it: string, arg: PNode): PNode = result.add arg result = semExprNoDeref(c, result, {efWantIterator}) +proc isTrivalStmtExpr(n: PNode): bool = + for i in 0 .. n.len-2: + if n[i].kind notin {nkEmpty, nkCommentStmt}: + return false + result = true + proc semFor(c: PContext, n: PNode): PNode = result = n checkMinSonsLen(n, 3) @@ -699,6 +705,9 @@ proc semFor(c: PContext, n: PNode): PNode = openScope(c) n.sons[length-2] = semExprNoDeref(c, n.sons[length-2], {efWantIterator}) var call = n.sons[length-2] + if call.kind == nkStmtListExpr and isTrivalStmtExpr(call): + call = call.lastSon + n.sons[length-2] = call let isCallExpr = call.kind in nkCallKinds if isCallExpr and call[0].kind == nkSym and call[0].sym.magic in {mFields, mFieldPairs, mOmpParFor}: diff --git a/tests/iter/titer2.nim b/tests/iter/titer2.nim index 4a7f76883..f60aed73a 100644 --- a/tests/iter/titer2.nim +++ b/tests/iter/titer2.nim @@ -2,7 +2,12 @@ discard """ output: '''true 3 4 -5''' +5 +0 +1 +2 +3 +4''' cmd: "nim $target --gc:none --hints:on --warnings:off $options $file" """ @@ -55,3 +60,7 @@ echo "true" # bug #1560 for i in @[3, 4, 5]: echo($i) + +# bug #6992 +for i in 0 ..< 5u32: + echo i