fixed bug #502858
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 13 Jan 2002 14:02:42 +0000 (14:02 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 13 Jan 2002 14:02:42 +0000 (14:02 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1794 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCCast.c

index dfb3ad05d9550b67640489dac1eafae661aab514..7092d9ea1e545fbed7f76b1fafdf701b4ef40126 100644 (file)
@@ -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;