closes #16132 [backport] (#18880)

* closes #16132 [backport]

* fixes #16132 [backport]
This commit is contained in:
Andreas Rumpf
2021-09-22 15:07:36 +02:00
committed by GitHub
parent 0ad601d3c1
commit 6163bdd279
2 changed files with 21 additions and 6 deletions

View File

@@ -1667,11 +1667,14 @@ proc takeImplicitAddr(c: PContext, n: PNode; isLent: bool): PNode =
proc asgnToResultVar(c: PContext, n, le, ri: PNode) {.inline.} =
if le.kind == nkHiddenDeref:
var x = le[0]
if x.kind == nkSym and x.sym.kind == skResult and (x.typ.kind in {tyVar, tyLent} or classifyViewType(x.typ) != noView):
n[0] = x # 'result[]' --> 'result'
n[1] = takeImplicitAddr(c, ri, x.typ.kind == tyLent)
x.typ.flags.incl tfVarIsPtr
#echo x.info, " setting it for this type ", typeToString(x.typ), " ", n.info
if x.kind == nkSym:
if x.sym.kind == skResult and (x.typ.kind in {tyVar, tyLent} or classifyViewType(x.typ) != noView):
n[0] = x # 'result[]' --> 'result'
n[1] = takeImplicitAddr(c, ri, x.typ.kind == tyLent)
x.typ.flags.incl tfVarIsPtr
#echo x.info, " setting it for this type ", typeToString(x.typ), " ", n.info
elif sfGlobal in x.sym.flags:
x.typ.flags.incl tfVarIsPtr
proc borrowCheck(c: PContext, n, le, ri: PNode) =
const

View File

@@ -5,7 +5,8 @@ discard """
3
2
3
3'''
3
15'''
targets: "c cpp"
"""
@@ -26,3 +27,14 @@ proc main(s: seq[int]) =
take x
main(@[11, 22, 33])
var x: int
proc foo(x: var int): var int =
once: x = 42
return x
var y: var int = foo(x)
y = 15
echo foo(x)
# bug #16132