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 <[email protected]>
+ * 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 <[email protected]>
+
* 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