diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2005-07-13 02:33:10 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2005-07-12 19:33:10 -0700 |
commit | fe83f5439acb1ce8d12d46e991e88aecf5d7c6dc (patch) | |
tree | 78b04c4676a17e65c12a5837d99d6bfd0a8fa7cd /gcc/tree-ssa-pre.c | |
parent | 13c2c08bad28dbf30454a90f56ad6da9ee171ae1 (diff) | |
download | gcc-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.c | 9 |
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); |