*** empty log message ***
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 4 Jul 1992 17:59:44 +0000 (13:59 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 4 Jul 1992 17:59:44 +0000 (13:59 -0400)
From-SVN: r1428

gcc/combine.c

index 922e6c6fa2caf013157f106f1cb9610c2b7a46eb..5e6a18300c7db3351b03acf500680fad8d874d94 100644 (file)
@@ -302,17 +302,20 @@ struct undobuf
 
 static struct undobuf undobuf;
 
-/* Substitute NEWVAL, an rtx expression, into INTO, a place in some
+/* Substitute NEWVAL, an rtx expression, into INTO, a place in some
    insn.  The substitution can be undone by undo_all.  If INTO is already
-   set to NEWVAL, do not record this change.  */
+   set to NEWVAL, do not record this change.  Because computing NEWVAL might
+   also call SUBST, we have to compute it before we put anything into
+   the undo table.  */
 
 #define SUBST(INTO, NEWVAL)  \
- do { if (undobuf.num_undo < MAX_UNDO)                                 \
+ do { rtx _new = (NEWVAL);                                             \
+      if (undobuf.num_undo < MAX_UNDO)                                 \
        {                                                               \
          undobuf.undo[undobuf.num_undo].where = &INTO;                 \
          undobuf.undo[undobuf.num_undo].old_contents = INTO;           \
          undobuf.undo[undobuf.num_undo].is_int = 0;                    \
-         INTO = NEWVAL;                                                \
+         INTO = _new;                                                  \
          if (undobuf.undo[undobuf.num_undo].old_contents != INTO)      \
            undobuf.num_undo++;                                         \
        }                                                               \