aboutsummaryrefslogtreecommitdiff
path: root/gcc/omp-low.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-07-13 08:59:56 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2010-07-13 08:59:56 +0200
commit2fed2012d551c7215e9a5a355d3b9bfe5a4c8545 (patch)
treeb123c5327b8752f626c90a170c875178af34b826 /gcc/omp-low.c
parent88ce80316fbb4d001f08eb4c65dbb7ae88e0474f (diff)
downloadgcc-2fed2012d551c7215e9a5a355d3b9bfe5a4c8545.zip
gcc-2fed2012d551c7215e9a5a355d3b9bfe5a4c8545.tar.gz
gcc-2fed2012d551c7215e9a5a355d3b9bfe5a4c8545.tar.bz2
re PR debug/44901 (-fcompare-debug failure for tree-predcom.c)
PR debug/44901 * vec.h (VEC_block_remove): Fix comment. * tree-ssa-live.c (remove_unused_locals): Don't use VEC_unordered_remove on local_decls, instead replace a single vector element in each iteration if at least one element had to be removed and VEC_truncate at the end. * omp-low.c (expand_omp_taskreg): Likewise. From-SVN: r162126
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r--gcc/omp-low.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index f289159..872d567 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -3378,7 +3378,7 @@ expand_omp_taskreg (struct omp_region *region)
}
else
{
- unsigned ix;
+ unsigned srcidx, dstidx, num;
/* If the parallel region needs data sent from the parent
function, then the very first statement (except possible
@@ -3515,11 +3515,18 @@ expand_omp_taskreg (struct omp_region *region)
single_succ_edge (new_bb)->flags = EDGE_FALLTHRU;
/* Remove non-local VAR_DECLs from child_cfun->local_decls list. */
- for (ix = 0; VEC_iterate (tree, child_cfun->local_decls, ix, t); )
- if (DECL_CONTEXT (t) != cfun->decl)
- ix++;
- else
- VEC_unordered_remove (tree, child_cfun->local_decls, ix);
+ num = VEC_length (tree, child_cfun->local_decls);
+ for (srcidx = 0, dstidx = 0; srcidx < num; srcidx++)
+ {
+ t = VEC_index (tree, child_cfun->local_decls, srcidx);
+ if (DECL_CONTEXT (t) == cfun->decl)
+ continue;
+ if (srcidx != dstidx)
+ VEC_replace (tree, child_cfun->local_decls, dstidx, t);
+ dstidx++;
+ }
+ if (dstidx != num)
+ VEC_truncate (tree, child_cfun->local_decls, dstidx);
/* Inform the callgraph about the new function. */
DECL_STRUCT_FUNCTION (child_fn)->curr_properties