Noticed when implementing some more patterns.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2014-11-12  Richard Biener  <rguent...@suse.de>

        * genmatch.c (capture_info::capture_info): Add missing
        COND_EXPR handling.
        (capture_info::walk_match): Fix COND_EXPR handling.
        (capture_info::walk_result): Likewise.

Index: gcc/genmatch.c
===================================================================
--- gcc/genmatch.c      (revision 217410)
+++ gcc/genmatch.c      (working copy)
@@ -1940,7 +1940,10 @@ capture_info::capture_info (simplify *s)
   info.safe_grow_cleared (s->capture_max + 1);
   e = as_a <expr *> (s->match);
   for (unsigned i = 0; i < e->ops.length (); ++i)
-    walk_match (e->ops[i], i, false);
+    walk_match (e->ops[i], i,
+               (i != 0 && *e->operation == COND_EXPR)
+               || *e->operation == TRUTH_ANDIF_EXPR
+               || *e->operation == TRUTH_ORIF_EXPR);
 
   walk_result (s->result, false);
 
@@ -1971,8 +1974,7 @@ capture_info::walk_match (operand *o, un
       for (unsigned i = 0; i < e->ops.length (); ++i)
        {
          bool cond_p = conditional_p;
-         if (i == 0
-             && *e->operation == COND_EXPR)
+         if (i != 0 && *e->operation == COND_EXPR)
            cond_p = true;
          else if (*e->operation == TRUTH_ANDIF_EXPR
                   || *e->operation == TRUTH_ORIF_EXPR)
@@ -2018,8 +2020,7 @@ capture_info::walk_result (operand *o, b
       for (unsigned i = 0; i < e->ops.length (); ++i)
        {
          bool cond_p = conditional_p;
-         if (i == 0
-             && *e->operation == COND_EXPR)
+         if (i != 0 && *e->operation == COND_EXPR)
            cond_p = true;
          else if (*e->operation == TRUTH_ANDIF_EXPR
                   || *e->operation == TRUTH_ORIF_EXPR)

Reply via email to