re PR tree-optimization/77697 (suspicious code in tree-ssa-forwprop.c)
authorRichard Biener <rguenther@suse.de>
Fri, 23 Sep 2016 12:37:22 +0000 (12:37 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 23 Sep 2016 12:37:22 +0000 (12:37 +0000)
2016-09-23  Richard Biener  <rguenther@suse.de>

PR tree-optimization/77697
* tree-ssa-forwprop.c (defcodefor_name): Remove bogus code,
signal error if we have sth ternary or unhandled.

From-SVN: r240430

gcc/ChangeLog
gcc/tree-ssa-forwprop.c

index 3bc2c8254d1db71d8c6f51159a15430689d3590c..2c4cf4328c2d2c0fa1f80d0ae9ad1db4c7171363 100644 (file)
@@ -1,3 +1,9 @@
+2016-09-23  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/77697
+       * tree-ssa-forwprop.c (defcodefor_name): Remove bogus code,
+       signal error if we have sth ternary or unhandled.
+
 2016-09-23  Matthew Wahab  <matthew.wahab@arm.com>
 
        * config/arm/arm_neon.h (vabd_f16): New.
index 5d7739b5bb33346e1341143843af74f1b1c36164..9cf2768a36c297afc0f279944032960b446b6e79 100644 (file)
@@ -1458,6 +1458,7 @@ defcodefor_name (tree name, enum tree_code *code, tree *arg1, tree *arg2)
   code1 = TREE_CODE (name);
   arg11 = name;
   arg21 = NULL_TREE;
+  arg31 = NULL_TREE;
   grhs_class = get_gimple_rhs_class (code1);
 
   if (code1 == SSA_NAME)
@@ -1470,20 +1471,18 @@ defcodefor_name (tree name, enum tree_code *code, tree *arg1, tree *arg2)
          code1 = gimple_assign_rhs_code (def);
          arg11 = gimple_assign_rhs1 (def);
           arg21 = gimple_assign_rhs2 (def);
-          arg31 = gimple_assign_rhs2 (def);
+          arg31 = gimple_assign_rhs3 (def);
        }
     }
-  else if (grhs_class == GIMPLE_TERNARY_RHS
-          || GIMPLE_BINARY_RHS
-          || GIMPLE_UNARY_RHS
-          || GIMPLE_SINGLE_RHS)
-    extract_ops_from_tree (name, &code1, &arg11, &arg21, &arg31);
+  else if (grhs_class != GIMPLE_SINGLE_RHS)
+    code1 = ERROR_MARK;
 
   *code = code1;
   *arg1 = arg11;
   if (arg2)
     *arg2 = arg21;
-  /* Ignore arg3 currently. */
+  if (arg31)
+    *code = ERROR_MARK;
 }