* src/SDCCicode.c (fgeniCodeAssign): fixed bug 1369874, don't use volatile variables...
authorbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 11 Dec 2005 21:31:17 +0000 (21:31 +0000)
committerbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 11 Dec 2005 21:31:17 +0000 (21:31 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4007 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCicode.c

index 27f22d3cb1d586eb96a2c1ec646e0334c1a622b3..daa3404e4bbc8afd9ae7780743bd4575a32f20fc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-10 Bernhard Held <bernhard AT bernhardheld.de>
+
+       * src/SDCCicode.c (fgeniCodeAssign): fixed bug 11369874, don't use
+       volatile variables as spill location
+
 2005-12-10 Bernhard Held <bernhard AT bernhardheld.de>
 
        * src/SDCCcse.c (findCheaperOp): fixed bug 1376320, copy signedness to
index 5827d4e5032ed44d420103ba564cdf676110b03f..513c7b6ccee6a2aaf7cc8fe47e7d04f0465d9136 100644 (file)
@@ -3264,12 +3264,16 @@ geniCodeAssign (operand * left, operand * right, int nosupdate, int strictLval)
       isOperandGlobal (left))
     {
       symbol *sym = NULL;
+      operand *newRight;
 
       if (IS_TRUE_SYMOP (right))
         sym = OP_SYMBOL (right);
       ic = newiCode ('=', NULL, right);
-      IC_RESULT (ic) = right = newiTempOperand (ltype, 0);
-      SPIL_LOC (right) = sym;
+      IC_RESULT (ic) = newRight = newiTempOperand (ltype, 0);
+      /* avoid double fetch from volatile right, see bug 1369874 */
+      if (!isOperandVolatile (right, FALSE))
+        SPIL_LOC (newRight) = sym;
+      right = newRight;
       ADDTOCHAIN (ic);
     }