aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-04-21 09:58:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-04-21 09:58:38 +0000
commit2970ccb3bbd710ac4905c5b2da5cf7547210adee (patch)
treecbdfe606ec1263a4ac53cb6b346f189d4825f041 /gcc
parent47f402d18f76fdc2b11748a195746f588fb1dcdf (diff)
downloadgcc-2970ccb3bbd710ac4905c5b2da5cf7547210adee.zip
gcc-2970ccb3bbd710ac4905c5b2da5cf7547210adee.tar.gz
gcc-2970ccb3bbd710ac4905c5b2da5cf7547210adee.tar.bz2
re PR middle-end/39827 (ICE (segfault) when compiling gcc/varasm.c (in notice_global_symbol))
2009-04-21 Richard Guenther <rguenther@suse.de> PR tree-optimization/39827 * tree-ssa-phiprop.c (propagate_with_phi): Check SSA_NAME is in range. (tree_ssa_phiprop): Pass the correct array size. From-SVN: r146515
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-ssa-phiprop.c8
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 930937f..c126166 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-04-21 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/39827
+ * tree-ssa-phiprop.c (propagate_with_phi): Check SSA_NAME
+ is in range.
+ (tree_ssa_phiprop): Pass the correct array size.
+
2009-04-21 Uros Bizjak <ubizjak@gmail.com>
* config/alpha/alpha.md (tune): Add cast to enum attr_tune.
diff --git a/gcc/tree-ssa-phiprop.c b/gcc/tree-ssa-phiprop.c
index f608f1d..4e6e09c 100644
--- a/gcc/tree-ssa-phiprop.c
+++ b/gcc/tree-ssa-phiprop.c
@@ -253,6 +253,7 @@ propagate_with_phi (basic_block bb, gimple phi, struct phiprop_d *phivn,
/* Avoid to have to decay *&a to a[0] later. */
|| !is_gimple_reg_type (TREE_TYPE (TREE_OPERAND (arg, 0))))
&& !(TREE_CODE (arg) == SSA_NAME
+ && SSA_NAME_VERSION (arg) < n
&& phivn[SSA_NAME_VERSION (arg)].value != NULL_TREE
&& phivn_valid_p (phivn, arg, bb)))
return false;
@@ -336,18 +337,19 @@ tree_ssa_phiprop (void)
basic_block bb;
gimple_stmt_iterator gsi;
unsigned i;
+ size_t n;
calculate_dominance_info (CDI_DOMINATORS);
- phivn = XCNEWVEC (struct phiprop_d, num_ssa_names);
+ n = num_ssa_names;
+ phivn = XCNEWVEC (struct phiprop_d, n);
/* Walk the dominator tree in preorder. */
bbs = get_all_dominated_blocks (CDI_DOMINATORS,
single_succ (ENTRY_BLOCK_PTR));
for (i = 0; VEC_iterate (basic_block, bbs, i, bb); ++i)
for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- did_something |= propagate_with_phi (bb, gsi_stmt (gsi),
- phivn, num_ssa_names);
+ did_something |= propagate_with_phi (bb, gsi_stmt (gsi), phivn, n);
if (did_something)
gsi_commit_edge_inserts ();