summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2022-03-26 06:37:04 +0100
committerGitHub <noreply@github.com>2022-03-26 06:37:04 +0100
commit12a0f88a52bae74e31d6d612f0e2aae3f90340a9 (patch)
treef97128d67e3fdb8f61acc10dcae44cb1b0ed991e
parentafbcba909b37b8c06250b141ddb9da4bf5bb9922 (diff)
downloadNim-12a0f88a52bae74e31d6d612f0e2aae3f90340a9.tar.gz
mitigates #19364 [backport]; we make this bug more unlikely to appear by producing better code to begin with; real fix will come later (#19647)
-rw-r--r--compiler/lowerings.nim18
1 files changed, 12 insertions, 6 deletions
diff --git a/compiler/lowerings.nim b/compiler/lowerings.nim
index 20003b946..382e48a16 100644
--- a/compiler/lowerings.nim
+++ b/compiler/lowerings.nim
@@ -74,14 +74,20 @@ proc lowerTupleUnpacking*(g: ModuleGraph; n: PNode; idgen: IdGenerator; owner: P
   let value = n.lastSon
   result = newNodeI(nkStmtList, n.info)
 
-  var temp = newSym(skTemp, getIdent(g.cache, genPrefix), nextSymId(idgen),
-                    owner, value.info, g.config.options)
-  temp.typ = skipTypes(value.typ, abstractInst)
-  incl(temp.flags, sfFromGeneric)
+  var tempAsNode: PNode
+  let avoidTemp = value.kind == nkSym
+  if avoidTemp:
+    tempAsNode = value
+  else:
+    var temp = newSym(skTemp, getIdent(g.cache, genPrefix), nextSymId(idgen),
+                  owner, value.info, g.config.options)
+    temp.typ = skipTypes(value.typ, abstractInst)
+    incl(temp.flags, sfFromGeneric)
+    tempAsNode = newSymNode(temp)
 
   var v = newNodeI(nkVarSection, value.info)
-  let tempAsNode = newSymNode(temp)
-  v.addVar(tempAsNode, value)
+  if not avoidTemp:
+    v.addVar(tempAsNode, value)
   result.add(v)
 
   for i in 0..<n.len-2: