From 1e796ed9d9e71da6f708b9e1d2b0792cbd6cb64b Mon Sep 17 00:00:00 2001 From: Araq Date: Fri, 20 Feb 2015 16:09:43 +0100 Subject: fixes #2051 --- compiler/semexprs.nim | 3 +++ compiler/transf.nim | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) 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): -- cgit 1.4.1-2-gfad0