* src/SDCCicode.c (geniCodeArray): applied patch from Stas Sergeev proposed in FR...
authorbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 19 Jan 2004 21:28:38 +0000 (21:28 +0000)
committerbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 19 Jan 2004 21:28:38 +0000 (21:28 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3140 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCicode.c

index 56c038388d52c049ea953680988ee1c35e49c1af..dab482aa0754dc18174fc40695f0d121f7151857 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-01-19 Bernhard Held <bernhard@bernhardheld.de>
+
+       * src/SDCCicode.c (geniCodeArray): applied patch from Stas Sergeev
+       proposed in FR #877103
+
 2004-01-18 Bernhard Held <bernhard@bernhardheld.de>
 
        * src/SDCCval.c (cheapestVal): added missing checks
index 8671e2ad369eeaecb5be1be3493966a6fd0ef30f..48cc6eabca252a2b42a071114759de04c8582bce 100644 (file)
@@ -2307,6 +2307,7 @@ operand *
 geniCodeArray (operand * left, operand * right,int lvl)
 {
   iCode *ic;
+  operand *size;
   sym_link *ltype = operandType (left);
   bool indexUnsigned;
 
@@ -2319,9 +2320,10 @@ geniCodeArray (operand * left, operand * right,int lvl)
 
       return geniCodeDerefPtr (geniCodeAdd (left, right, lvl), lvl);
     }
+  size = operandFromLit (getSize (ltype->next));
+  SPEC_USIGN (getSpec (operandType (size))) = 1;
   indexUnsigned = IS_UNSIGNED (getSpec (operandType (right)));
-  right = geniCodeMultiply (right,
-                           operandFromLit (getSize (ltype->next)), (getArraySizePtr(left) >= INTSIZE));
+  right = geniCodeMultiply (right, size, (getArraySizePtr(left) >= INTSIZE));
   /* Even if right is a 'unsigned char', the result will be a 'signed int' due to the promotion rules.
      It doesn't make sense when accessing arrays, so let's fix it here: */
   if (indexUnsigned)