genmatch.c (capture_info::capture_info): Add missing COND_EXPR handling.
authorRichard Biener <rguenther@suse.de>
Wed, 12 Nov 2014 11:59:40 +0000 (11:59 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 12 Nov 2014 11:59:40 +0000 (11:59 +0000)
2014-11-12  Richard Biener  <rguenther@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.

From-SVN: r217414

gcc/ChangeLog
gcc/genmatch.c

index 3184fc9e3e00a5bd0600f38ff08a0cab423d39b1..26eeacab68f6c7dece972423dca9e870046daf8e 100644 (file)
@@ -1,3 +1,10 @@
+2014-11-12  Richard Biener  <rguenther@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.
+
 2014-11-12  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/63821
index 234b1a7987cc44aabac796cb42a03ba950043973..3dcdb70beefa974b3b197ae657988618a833f985 100644 (file)
@@ -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, unsigned toplevel_arg, bool conditional_p)
       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, bool conditional_p)
       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)