shithub: mc

Download patch

ref: 9cbbff954e6150de5c2e96bf27c560f005d995f0
parent: ced0753bec92450b81816e9f33badb1a9a57a1ff
author: Ori Bernstein <ori@eigenstate.org>
date: Tue Jul 24 18:55:02 EDT 2012

Fix postinc/postdec.

--- a/8/isel.c
+++ b/8/isel.c
@@ -328,8 +328,9 @@
             b = inr(s, b);
         if (o->type == Loclit) {
             l = locmem(scale*o->lit, b, Rnone, m);
-        } else if (o->type == Locreg) {
+        } else {
             b = inr(s, b);
+            o = inr(s, o);
             l = locmems(0, b, o, scale, m);
         }
     } else {
@@ -337,6 +338,7 @@
         l = inr(s, l);
         l = locmem(0, l, Rnone, m);
     }
+    assert(l != NULL);
     return l;
 }
 
--- a/8/simp.c
+++ b/8/simp.c
@@ -924,12 +924,12 @@
          *  => args[0] = args[0] + 1
          *     expr(x) */
         case Opreinc:
-            t = lval(s, args[0]);
+            t = load(lval(s, args[0]));
             r = store(t, add(t, one));
             lappend(&s->incqueue, &s->nqueue, t);
             break;
         case Opredec:
-            t = lval(s, args[0]);
+            t = load(lval(s, args[0]));
             r = store(t, sub(t, one));
             lappend(&s->incqueue, &s->nqueue, t);
             break;
@@ -940,13 +940,13 @@
          *      x = x + 1
          */
         case Opostinc:
-            r = lval(s, args[0]);
-            t = store(r, add(one, r));
+            r = rval(s, args[0], NULL);
+            t = store(lval(s, args[0]), add(r, one));
             lappend(&s->incqueue, &s->nqueue, t);
             break;
         case Opostdec:
-            r = lval(s, args[0]);
-            t = store(r, sub(one, r));
+            r = rval(s, args[0], NULL);
+            t = store(lval(s, args[0]), sub(r, one));
             lappend(&s->incqueue, &s->nqueue, t);
             break;
         case Olit: