bugfix: detect captures in non-closure inner procs

This commit is contained in:
Araq 2017-11-03 18:05:14 +01:00
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 var o = owner.skipGenericOwner
while o.kind != skModule and o != nil: while o.kind != skModule and o != nil:
if s.owner == o: 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 #echo "computing .closure for ", owner.name.s, " ", owner.info, " because of ", s.name.s
o = o.skipGenericOwner o = o.skipGenericOwner
# since the analysis is not entirely correct, we don't set 'tfCapturesEnv' # 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")