Hi,

The problem appears in revision 201034 in version 4.9.  I attached a
one-line patch that fixes it.  I also reported this problem
at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57780

Bootstrap and regression-tested on x86_64-linux.

In method "subst_dup()" in gensupport.c, the loop on line 2181
should not be executed when "code" equals to "MATCH_DUP" or "MATCH_OP_DUP".


2013-07-22  Chang  <pcha...@cs.wisc.edu>

        * gensupport.c (subst_dup): Avoid loop if code is not
        MATCH_DUP nor MATCH_OP_DUP.


Index: gcc/gensupport.c
===================================================================
--- gcc/gensupport.c    (revision 201034)
+++ gcc/gensupport.c    (working copy)
@@ -2178,8 +2178,8 @@
          if (XVEC (pattern, i) == NULL)
            break;
        case 'E':
-         for (j = XVECLEN (pattern, i) - 1; j >= 0; --j)
-           if (code != MATCH_DUP && code != MATCH_OP_DUP)
+         if (code != MATCH_DUP && code != MATCH_OP_DUP)
+           for (j = XVECLEN (pattern, i) - 1; j >= 0; --j)
              XVECEXP (pattern, i, j) = subst_dup (XVECEXP (pattern, i, j),
                                                   n_alt, n_subst_alt);
          break;


-Chang
Index: gcc/gensupport.c
===================================================================
--- gcc/gensupport.c    (revision 201034)
+++ gcc/gensupport.c    (working copy)
@@ -2178,8 +2178,8 @@
          if (XVEC (pattern, i) == NULL)
            break;
        case 'E':
-         for (j = XVECLEN (pattern, i) - 1; j >= 0; --j)
-           if (code != MATCH_DUP && code != MATCH_OP_DUP)
+         if (code != MATCH_DUP && code != MATCH_OP_DUP)
+           for (j = XVECLEN (pattern, i) - 1; j >= 0; --j)
              XVECEXP (pattern, i, j) = subst_dup (XVECEXP (pattern, i, j),
                                                   n_alt, n_subst_alt);
          break;

Reply via email to