diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2022-03-26 06:37:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-26 06:37:04 +0100 |
commit | 12a0f88a52bae74e31d6d612f0e2aae3f90340a9 (patch) | |
tree | f97128d67e3fdb8f61acc10dcae44cb1b0ed991e | |
parent | afbcba909b37b8c06250b141ddb9da4bf5bb9922 (diff) | |
download | Nim-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.nim | 18 |
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: |