diff options
author | Richard Guenther <rguenther@suse.de> | 2009-04-21 09:58:38 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-04-21 09:58:38 +0000 |
commit | 2970ccb3bbd710ac4905c5b2da5cf7547210adee (patch) | |
tree | cbdfe606ec1263a4ac53cb6b346f189d4825f041 /gcc | |
parent | 47f402d18f76fdc2b11748a195746f588fb1dcdf (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-phiprop.c | 8 |
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 (); |