diff options
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index f246643..0a6fa94 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4380,9 +4380,12 @@ eliminate (void) if (is_gimple_call (stmt) && TREE_CODE (gimple_call_fn (stmt)) == SSA_NAME) { - tree fn = VN_INFO (gimple_call_fn (stmt))->valnum; + tree orig_fn = gimple_call_fn (stmt); + tree fn = VN_INFO (orig_fn)->valnum; if (TREE_CODE (fn) == ADDR_EXPR - && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL) + && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL + && useless_type_conversion_p (TREE_TYPE (orig_fn), + TREE_TYPE (fn))) { bool can_make_abnormal_goto = stmt_can_make_abnormal_goto (stmt); |