Fixed array derefs
authorsandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 30 Sep 2000 16:55:32 +0000 (16:55 +0000)
committersandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 30 Sep 2000 16:55:32 +0000 (16:55 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@424 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCCicode.c

index 3b89daff3965e6dcd35b6521940328d0a1b58cb2..4c803639ad654e51cc93940391deeb38f2f8f1a1 100644 (file)
@@ -2755,15 +2755,19 @@ operand *ast2iCode (ast *tree)
         tree->opval.op != SWITCH &&
         tree->opval.op != FUNCTION &&
         tree->opval.op != INLINEASM ) {
+
        if (IS_ASSIGN_OP(tree->opval.op) || 
            IS_DEREF_OP(tree)            || 
            (tree->opval.op == '&' && !tree->right) ||
            tree->opval.op == PTR_OP) {
-           lvaluereq++;
-           if (IS_ARRAY_OP(tree->left) && IS_ARRAY_OP(tree->left->left))
+           lvaluereq++;
+           if ((IS_ARRAY_OP(tree->left) && IS_ARRAY_OP(tree->left->left)) ||
+               (IS_DEREF_OP(tree) && IS_ARRAY_OP(tree->left)))
            {
-               lvaluereq--;
+               int olvr = lvaluereq ;
+               lvaluereq = 0;
                left = operandFromAst(tree->left);
+               lvaluereq = olvr - 1;
            } else {
                left = operandFromAst(tree->left);
                lvaluereq--;