gcc/ChangeLog.gimple-classes:
        * tree-ssa-ter.c (find_replaceable_in_bb): Replace
        is_gimple_assign with a dyn_cast, introducing local "def_assign"
        and using it in place of "def_stmt" for typesafety.  Add a checked
        cast.
---
 gcc/ChangeLog.gimple-classes |  7 +++++++
 gcc/tree-ssa-ter.c           | 16 ++++++++++------
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes
index 0bd0421..43c05ec 100644
--- a/gcc/ChangeLog.gimple-classes
+++ b/gcc/ChangeLog.gimple-classes
@@ -1,5 +1,12 @@
 2014-11-06  David Malcolm  <dmalc...@redhat.com>
 
+       * tree-ssa-ter.c (find_replaceable_in_bb): Replace
+       is_gimple_assign with a dyn_cast, introducing local "def_assign"
+       and using it in place of "def_stmt" for typesafety.  Add a checked
+       cast.
+
+2014-11-06  David Malcolm  <dmalc...@redhat.com>
+
        * tree-ssa-tail-merge.c (same_succ_hash): Add checked cast.
        (gimple_equal_p): Add checked casts.
 
diff --git a/gcc/tree-ssa-ter.c b/gcc/tree-ssa-ter.c
index 96b3959..adbc5f9 100644
--- a/gcc/tree-ssa-ter.c
+++ b/gcc/tree-ssa-ter.c
@@ -640,14 +640,18 @@ find_replaceable_in_bb (temp_expr_table_p tab, 
basic_block bb)
              if (gimple_vdef (stmt))
                {
                  gimple def_stmt = SSA_NAME_DEF_STMT (use);
-                 while (is_gimple_assign (def_stmt)
-                        && gimple_assign_rhs_code (def_stmt) == SSA_NAME)
-                   def_stmt
-                     = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
+                 while (gassign *def_assign = dyn_cast <gassign *> (def_stmt))
+                   {
+                     if (gimple_assign_rhs_code (def_assign) != SSA_NAME)
+                       break;
+                     def_stmt
+                       = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_assign));
+                   }
                  if (gimple_vuse (def_stmt)
                      && gimple_assign_single_p (def_stmt)
-                     && stmt_may_clobber_ref_p (stmt,
-                                                gimple_assign_rhs1 (def_stmt)))
+                     && stmt_may_clobber_ref_p (
+                          stmt,
+                          gimple_assign_rhs1 (as_a <gassign *> (def_stmt))))
                    {
                      /* For calls, it is not a problem if USE is among
                         call's arguments or say OBJ_TYPE_REF argument,
-- 
1.7.11.7

Reply via email to