fixes #5113
This commit is contained in:
parent
14e496fab0
commit
b43025b754
2 changed files with 17 additions and 0 deletions
|
|
@ -526,6 +526,14 @@ proc analyseIfAddressTakenInCall(c: PContext, n: PNode) =
|
||||||
if isAssignable(c, it) notin {arLValue, arLocalLValue}:
|
if isAssignable(c, it) notin {arLValue, arLocalLValue}:
|
||||||
if it.kind != nkHiddenAddr:
|
if it.kind != nkHiddenAddr:
|
||||||
localError(it.info, errVarForOutParamNeededX, $it)
|
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
|
return
|
||||||
for i in countup(1, sonsLen(n) - 1):
|
for i in countup(1, sonsLen(n) - 1):
|
||||||
if n.sons[i].kind == nkHiddenCallConv:
|
if n.sons[i].kind == nkHiddenCallConv:
|
||||||
|
|
|
||||||
9
tests/varres/tnewseq_on_result_vart.nim
Normal file
9
tests/varres/tnewseq_on_result_vart.nim
Normal 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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue