real bugfix for #17170 (#18171)

* real bugfix for #17170

* better fix
This commit is contained in:
Andreas Rumpf 2021-06-04 16:20:47 +02:00 • committed by GitHub
commit 5423915e5a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 4 deletions

View file

@ -414,6 +414,9 @@ proc exprToStmtList(n: PNode): tuple[s, res: PNode] =
proc newEnvVarAsgn(ctx: Ctx, s: PSym, v: PNode): PNode = proc newEnvVarAsgn(ctx: Ctx, s: PSym, v: PNode): PNode =
if isEmptyType(v.typ):
result = v
else:
result = newTree(nkFastAsgn, ctx.newEnvVarAccess(s), v) result = newTree(nkFastAsgn, ctx.newEnvVarAccess(s), v)
result.info = v.info result.info = v.info
@ -427,7 +430,6 @@ proc addExprAssgn(ctx: Ctx, output, input: PNode, sym: PSym) =
proc convertExprBodyToAsgn(ctx: Ctx, exprBody: PNode, res: PSym): PNode = proc convertExprBodyToAsgn(ctx: Ctx, exprBody: PNode, res: PSym): PNode =
result = newNodeI(nkStmtList, exprBody.info) result = newNodeI(nkStmtList, exprBody.info)
if exprBody.typ != nil:
ctx.addExprAssgn(result, exprBody, res) ctx.addExprAssgn(result, exprBody, res)
proc newNotCall(g: ModuleGraph; e: PNode): PNode = proc newNotCall(g: ModuleGraph; e: PNode): PNode =

View file

@ -364,6 +364,7 @@ proc genMarkCyclic(c: var Con; result, dest: PNode) =
proc genCopyNoCheck(c: var Con; dest, ri: PNode): PNode = proc genCopyNoCheck(c: var Con; dest, ri: PNode): PNode =
let t = dest.typ.skipTypes({tyGenericInst, tyAlias, tySink}) let t = dest.typ.skipTypes({tyGenericInst, tyAlias, tySink})
result = c.genOp(t, attachedAsgn, dest, ri) result = c.genOp(t, attachedAsgn, dest, ri)
assert ri.typ != nil
proc genCopy(c: var Con; dest, ri: PNode): PNode = proc genCopy(c: var Con; dest, ri: PNode): PNode =
let t = dest.typ let t = dest.typ
@ -371,6 +372,7 @@ proc genCopy(c: var Con; dest, ri: PNode): PNode =
# try to improve the error message here: # try to improve the error message here:
c.checkForErrorPragma(t, ri, "=copy") c.checkForErrorPragma(t, ri, "=copy")
result = c.genCopyNoCheck(dest, ri) result = c.genCopyNoCheck(dest, ri)
assert ri.typ != nil
proc genDiscriminantAsgn(c: var Con; s: var Scope; n: PNode): PNode = proc genDiscriminantAsgn(c: var Con; s: var Scope; n: PNode): PNode =
# discriminator is ordinal value that doesn't need sink destroy # discriminator is ordinal value that doesn't need sink destroy