diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 17 |
3 files changed, 20 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a4d94fe..d39dfc8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-02-02 Diego Novillo <dnovillo@redhat.com> + + PR 25990 + * tree-cfg.c (move_block_to_fn): Clear out the basic block + array after growing it. + 2006-02-01 Steve Ellcey <sje@cup.hp.com> PR middle-end/24901 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cb357c5..5d4cff5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-02-02 Diego Novillo <dnovillo@redhat.com> + + PR 25990 + * gcc.dg/gomp/pr25990.c: New test. + 2006-01-31 Mark Mitchell <mark@codesourcery.com> PR c++/25342 diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index f76f663..9ba761d 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -4656,7 +4656,8 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb, edge e; block_stmt_iterator si; struct move_stmt_d d; - unsigned sz; + unsigned old_len, new_len; + basic_block *addr; /* Link BB to the new linked list. */ move_block_after (bb, after); @@ -4679,11 +4680,13 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb, if (bb->index > cfg->x_last_basic_block) cfg->x_last_basic_block = bb->index; - sz = VEC_length (basic_block, cfg->x_basic_block_info); - if ((unsigned) cfg->x_last_basic_block >= sz) + old_len = VEC_length (basic_block, cfg->x_basic_block_info); + if ((unsigned) cfg->x_last_basic_block >= old_len) { - sz = cfg->x_last_basic_block + (cfg->x_last_basic_block + 3) / 4; - VEC_safe_grow (basic_block, gc, cfg->x_basic_block_info, sz); + new_len = cfg->x_last_basic_block + (cfg->x_last_basic_block + 3) / 4; + VEC_safe_grow (basic_block, gc, cfg->x_basic_block_info, new_len); + addr = VEC_address (basic_block, cfg->x_basic_block_info); + memset (&addr[old_len], 0, sizeof (basic_block) * (new_len - old_len)); } VEC_replace (basic_block, cfg->x_basic_block_info, @@ -4708,7 +4711,6 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb, if (TREE_CODE (stmt) == LABEL_EXPR) { - unsigned old_len; tree label = LABEL_EXPR_LABEL (stmt); int uid = LABEL_DECL_UID (label); @@ -4717,8 +4719,7 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb, old_len = VEC_length (basic_block, cfg->x_label_to_block_map); if (old_len <= (unsigned) uid) { - basic_block *addr; - unsigned new_len = 3 * uid / 2; + new_len = 3 * uid / 2; VEC_safe_grow (basic_block, gc, cfg->x_label_to_block_map, new_len); addr = VEC_address (basic_block, cfg->x_label_to_block_map); |