aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-09-10 16:14:30 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-09-10 16:14:30 +0000
commitb5d76df4c9e0270dee8ac9d5fbfb1338f9ec6717 (patch)
tree25584571a5c91caf4841abff2ad961c1d938d89d /gcc
parentbfb0b886347527f7747735d030a112b773b45098 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/tree-ssa-pre.c18
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;