aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-pre.c
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2005-07-13 02:33:10 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-07-12 19:33:10 -0700
commitfe83f5439acb1ce8d12d46e991e88aecf5d7c6dc (patch)
tree78b04c4676a17e65c12a5837d99d6bfd0a8fa7cd /gcc/tree-ssa-pre.c
parent13c2c08bad28dbf30454a90f56ad6da9ee171ae1 (diff)
downloadgcc-fe83f5439acb1ce8d12d46e991e88aecf5d7c6dc.zip
gcc-fe83f5439acb1ce8d12d46e991e88aecf5d7c6dc.tar.gz
gcc-fe83f5439acb1ce8d12d46e991e88aecf5d7c6dc.tar.bz2
re PR middle-end/21840 (ICE while building Linux kernel (seg fault), missing cast)
2005-07-12 Andrew Pinski <pinskia@physics.uc.edu> PR tree-opt/21840 * tree-ssa-pre.c (eliminate): Convert the sprime to the correct type if *rhs_p is not a SSA_NAME. 2005-07-12 Andrew Pinski <pinskia@physics.uc.edu> PR tree-opt/21840 * gcc.c-torture/compile/pr21840.c: New test. From-SVN: r101960
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r--gcc/tree-ssa-pre.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index eab18d3..fbfda11 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -2334,8 +2334,17 @@ eliminate (void)
fprintf (dump_file, " in ");
print_generic_stmt (dump_file, stmt, 0);
}
+
if (TREE_CODE (sprime) == SSA_NAME)
NECESSARY (SSA_NAME_DEF_STMT (sprime)) = 1;
+ /* We need to make sure the new and old types actually match,
+ which may require adding a simple cast, which fold_convert
+ will do for us. */
+ if (TREE_CODE (*rhs_p) != SSA_NAME
+ && !tree_ssa_useless_type_conversion_1 (TREE_TYPE (*rhs_p),
+ TREE_TYPE (sprime)))
+ sprime = fold_convert (TREE_TYPE (*rhs_p), sprime);
+
pre_stats.eliminations++;
propagate_tree_value (rhs_p, sprime);
update_stmt (stmt);