From: sandeep Date: Sat, 30 Sep 2000 16:55:32 +0000 (+0000) Subject: Fixed array derefs X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=9befd2e168255ebb44b9cbf3ad072a33f384a48a;p=fw%2Fsdcc Fixed array derefs git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@424 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/SDCCicode.c b/src/SDCCicode.c index 3b89daff..4c803639 100644 --- a/src/SDCCicode.c +++ b/src/SDCCicode.c @@ -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--;