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;