From: johanknol Date: Sun, 13 Jan 2002 14:02:42 +0000 (+0000) Subject: fixed bug #502858 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=d1c31d130a11ca54e39e4fcbffcaf206b9c5f3d3;p=fw%2Fsdcc fixed bug #502858 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1794 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/SDCCast.c b/src/SDCCast.c index dfb3ad05..7092d9ea 100644 --- a/src/SDCCast.c +++ b/src/SDCCast.c @@ -1633,9 +1633,16 @@ isConformingBody (ast * pbody, symbol * sym, ast * body) if (astHasVolatile (pbody->left)) return FALSE; - if (IS_AST_SYM_VALUE (pbody->left) && - isSymbolEqual (AST_SYMBOL (pbody->left), sym)) - return FALSE; + if (IS_AST_SYM_VALUE (pbody->left)) { + // if the loopvar has an assignment + if (isSymbolEqual (AST_SYMBOL (pbody->left), sym)) + return FALSE; + // if the loopvar is used in another (maybe conditional) block + if (astHasSymbol (pbody->right, sym) && + (pbody->level > body->level)) { + return FALSE; + } + } if (astHasVolatile (pbody->left)) return FALSE;