diff options
author | Richard Guenther <rguenther@suse.de> | 2008-09-10 16:14:30 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-09-10 16:14:30 +0000 |
commit | b5d76df4c9e0270dee8ac9d5fbfb1338f9ec6717 (patch) | |
tree | 25584571a5c91caf4841abff2ad961c1d938d89d /gcc | |
parent | bfb0b886347527f7747735d030a112b773b45098 (diff) | |
download | gcc-b5d76df4c9e0270dee8ac9d5fbfb1338f9ec6717.zip gcc-b5d76df4c9e0270dee8ac9d5fbfb1338f9ec6717.tar.gz gcc-b5d76df4c9e0270dee8ac9d5fbfb1338f9ec6717.tar.bz2 |
tree-ssa-pre.c (phi_translate_1): Fix memory leak.
2008-09-10 Richard Guenther <rguenther@suse.de>
* tree-ssa-pre.c (phi_translate_1): Fix memory leak.
From-SVN: r140236
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 18 |
2 files changed, 16 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1922b1..c24b2e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2008-09-10 Richard Guenther <rguenther@suse.de> + * tree-ssa-pre.c (phi_translate_1): Fix memory leak. + +2008-09-10 Richard Guenther <rguenther@suse.de> + PR middle-end/37432 * tree-inline.c (insert_init_stmt): Make sure to not insert invalid gimple stores. diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 8324f09..a54999b 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1504,11 +1504,11 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, { tree name = get_representative_for (opresult); if (!name) - return NULL; + break; op0 = name; } else if (!opresult) - return NULL; + break; } changed |= op0 != oldop0; @@ -1522,11 +1522,11 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, { tree name = get_representative_for (opresult); if (!name) - return NULL; + break; op1 = name; } else if (!opresult) - return NULL; + break; } changed |= op1 != oldop1; if (op2 && TREE_CODE (op2) == SSA_NAME) @@ -1539,11 +1539,11 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, { tree name = get_representative_for (opresult); if (!name) - return NULL; + break; op2 = name; } else if (!opresult) - return NULL; + break; } changed |= op2 != oldop2; @@ -1558,6 +1558,12 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2, newop.op2 = op2; VEC_replace (vn_reference_op_s, newoperands, i, &newop); } + if (i != VEC_length (vn_reference_op_s, operands)) + { + if (newoperands) + VEC_free (vn_reference_op_s, heap, newoperands); + return NULL; + } newvuses = translate_vuses_through_block (vuses, phiblock, pred); changed |= newvuses != vuses; |