summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semstmts.nim2
-rw-r--r--tests/parser/ttupleunpack.nim32
2 files changed, 22 insertions, 12 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim
index 24c135767..c0c48782e 100644
--- a/compiler/semstmts.nim
+++ b/compiler/semstmts.nim
@@ -442,6 +442,8 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
       var v = semIdentDef(c, a.sons[j], symkind)
       if sfGenSym notin v.flags and
          not isDiscardUnderscore(a.sons[j]): addInterfaceDecl(c, v)
+      if isDiscardUnderscore(a.sons[j]):
+        v.flags.incl(sfGenSym)
       when oKeepVariableNames:
         if c.inUnrolledContext > 0: v.flags.incl(sfShadowed)
         else:
diff --git a/tests/parser/ttupleunpack.nim b/tests/parser/ttupleunpack.nim
index 3a1b77ea1..581e6e940 100644
--- a/tests/parser/ttupleunpack.nim
+++ b/tests/parser/ttupleunpack.nim
@@ -3,19 +3,27 @@ discard """
   output: ""
   exitcode: 0
 """
-proc foo(): tuple[x, y, z: int] =
-  return (4, 2, 3)
 
-var (x, _, y) = foo()
-doAssert x == 4
-doAssert y == 3
+proc main() =
 
-var (a, _, _) = foo()
-doAssert a == 4
+  proc foo(): tuple[x, y, z: int] =
+    return (4, 2, 3)
 
-iterator bar(): tuple[x, y, z: int] =
-  yield (1,2,3)
+  var (x, _, y) = foo()
+  doAssert x == 4
+  doAssert y == 3
 
-for x, y, _ in bar():
-  doAssert x == 1
-  doAssert y == 2
+  var (a, _, _) = foo()
+  doAssert a == 4
+
+  var (a, _, _xx) = foo()
+  doAssert a == 4
+
+  iterator bar(): tuple[x, y, z: int] =
+    yield (1,2,3)
+
+  for x, y, _ in bar():
+    doAssert x == 1
+    doAssert y == 2
+
+main()