re PR tree-optimization/22329 (VRP produces mis-matched (non compatible) types in...
authorAndrew Pinski <pinskia@physics.uc.edu>
Fri, 8 Jul 2005 19:26:16 +0000 (19:26 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Fri, 8 Jul 2005 19:26:16 +0000 (12:26 -0700)
2005-07-08  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/22329
        * gcc.dg/pr22329.c: New test.
2005-07-08  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/22329
        * tree-ssa-propagate.c (fold_predicate_in): Convert the value
        to the correct type if we have a MODIFY_EXPR.

From-SVN: r101789

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr22329.c [new file with mode: 0644]
gcc/tree-ssa-propagate.c

index adceec9b3108df08637da8c1404b31a2b4affffc..2c169d2cc93e7bd49f71c92c704993b5786f7e6d 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-08  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR tree-opt/22329
+       * tree-ssa-propagate.c (fold_predicate_in): Convert the value
+       to the correct type if we have a MODIFY_EXPR.
+
 2005-07-08  Kazu Hirata  <kazu@codesourcery.com>
 
        PR tree-optimization/22360
index 862e457baff8731fd2d71f382a725a906b21b570..f61b47363cd5957a4721e7b35e913cd18f1d059c 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-08  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR tree-opt/22329
+       * gcc.dg/pr22329.c: New test.
+
 2005-07-08  Kazu Hirata  <kazu@codesourcery.com>
 
        PR tree-optimization/20139
diff --git a/gcc/testsuite/gcc.dg/pr22329.c b/gcc/testsuite/gcc.dg/pr22329.c
new file mode 100644 (file)
index 0000000..94e32d6
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+int f(int i)
+{
+  int k = 0;
+  if (i == 0)
+    k = i == 0;
+  return k;
+}
index b9b308e607892db98305b610430d4e4d3b9dfec0..07b13e3fa5fc912bd36d70c76c9ff2576f1622fe 100644 (file)
@@ -1018,11 +1018,15 @@ static bool
 fold_predicate_in (tree stmt)
 {
   tree *pred_p = NULL;
+  bool modify_expr_p = false;
   tree val;
 
   if (TREE_CODE (stmt) == MODIFY_EXPR
       && COMPARISON_CLASS_P (TREE_OPERAND (stmt, 1)))
-    pred_p = &TREE_OPERAND (stmt, 1);
+    {
+      modify_expr_p = true;
+      pred_p = &TREE_OPERAND (stmt, 1);
+    }
   else if (TREE_CODE (stmt) == COND_EXPR)
     pred_p = &COND_EXPR_COND (stmt);
   else
@@ -1031,6 +1035,9 @@ fold_predicate_in (tree stmt)
   val = vrp_evaluate_conditional (*pred_p, true);
   if (val)
     {
+      if (modify_expr_p)
+        val = fold_convert (TREE_TYPE (*pred_p), val);
+      
       if (dump_file)
        {
          fprintf (dump_file, "Folding predicate ");