This commit is contained in:
Andreas Rumpf
2018-04-21 23:58:24 +02:00
parent 14e496fab0
commit b43025b754
2 changed files with 17 additions and 0 deletions

View File

@@ -526,6 +526,14 @@ proc analyseIfAddressTakenInCall(c: PContext, n: PNode) =
if isAssignable(c, it) notin {arLValue, arLocalLValue}:
if it.kind != nkHiddenAddr:
localError(it.info, errVarForOutParamNeededX, $it)
# bug #5113: disallow newSeq(result) where result is a 'var T':
if n[0].sym.magic in {mNew, mNewFinalize, mNewSeq}:
var arg = n[1] #.skipAddr
if arg.kind == nkHiddenDeref: arg = arg[0]
if arg.kind == nkSym and arg.sym.kind == skResult and
arg.typ.skipTypes(abstractInst).kind in {tyVar, tyLent}:
localError(n.info, errXStackEscape, renderTree(n[1], {renderNoComments}))
return
for i in countup(1, sonsLen(n) - 1):
if n.sons[i].kind == nkHiddenCallConv:

View File

@@ -0,0 +1,9 @@
discard """
line: 9
errormsg: "address of 'result' may not escape its stack frame"
"""
# bug #5113
proc makeSeqVar(size: Natural): var seq[int] =
newSeq(result, size)