diff options
author | Araq <rumpf_a@web.de> | 2015-02-20 16:09:43 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-02-20 16:09:43 +0100 |
commit | 1e796ed9d9e71da6f708b9e1d2b0792cbd6cb64b (patch) | |
tree | 3018e6ee82c2da266de83c6c1e8efda4dd56edfc | |
parent | 2a0b543fc39c5d44df5b3c8a2b84afc3688d21dc (diff) | |
download | Nim-1e796ed9d9e71da6f708b9e1d2b0792cbd6cb64b.tar.gz |
fixes #2051
-rw-r--r-- | compiler/semexprs.nim | 3 | ||||
-rw-r--r-- | compiler/transf.nim | 3 |
2 files changed, 5 insertions, 1 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index bce766626..da64df9dc 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -756,6 +756,9 @@ proc semOverloadedCallAnalyseEffects(c: PContext, n: PNode, nOrig: PNode, else: if callee.kind in skIterators and callee.id == c.p.owner.id: localError(n.info, errRecursiveDependencyX, callee.name.s) + # error correction, prevents endless for loop elimination in transf. + # See bug #2051: + result.sons[0] = newSymNode(errorSym(c, n)) if sfNoSideEffect notin callee.flags: if {sfImportc, sfSideEffect} * callee.flags != {}: incl(c.p.owner.flags, sfSideEffect) diff --git a/compiler/transf.nim b/compiler/transf.nim index cf13630fd..2f520aa20 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -492,7 +492,8 @@ proc transformFor(c: PTransf, n: PNode): PTransNode = var newC = newTransCon(getCurrOwner(c)) newC.forStmt = n newC.forLoopBody = loopBody - internalAssert iter.kind == skIterator + # this can fail for 'nimsuggest' and 'check': + if iter.kind != skIterator: return result # generate access statements for the parameters (unless they are constant) pushTransCon(c, newC) for i in countup(1, sonsLen(call) - 1): |