bugfix: detect captures in non-closure inner procs

This commit is contained in:
Araq
2017-11-03 18:05:14 +01:00
parent 0f5261e971
commit 8cc268876a
2 changed files with 16 additions and 1 deletions

View File

@@ -764,7 +764,10 @@ proc semCaptureSym*(s, owner: PSym) =
var o = owner.skipGenericOwner
while o.kind != skModule and o != nil:
if s.owner == o:
owner.typ.callConv = ccClosure
if owner.typ.callConv in {ccClosure, ccDefault} or owner.kind == skIterator:
owner.typ.callConv = ccClosure
else:
discard "do not produce an error here, but later"
#echo "computing .closure for ", owner.name.s, " ", owner.info, " because of ", s.name.s
o = o.skipGenericOwner
# since the analysis is not entirely correct, we don't set 'tfCapturesEnv'

View File

@@ -0,0 +1,12 @@
discard """
line: 9
errormsg: "illegal capture 'x'"
"""
proc outer(arg: string) =
var x = 0
proc inner {.inline.} =
echo "inner", x
inner()
outer("abc")