From: Richard Guenther Date: Wed, 10 Sep 2008 16:14:30 +0000 (+0000) Subject: tree-ssa-pre.c (phi_translate_1): Fix memory leak. X-Git-Tag: releases/gcc-4.4.0~2513 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b5d76df4c9e0270dee8ac9d5fbfb1338f9ec6717;p=thirdparty%2Fgcc.git tree-ssa-pre.c (phi_translate_1): Fix memory leak. 2008-09-10 Richard Guenther * tree-ssa-pre.c (phi_translate_1): Fix memory leak. From-SVN: r140236 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1922b1ce5a0..c24b2e8bd2e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2008-09-10 Richard Guenther + + * tree-ssa-pre.c (phi_translate_1): Fix memory leak. + 2008-09-10 Richard Guenther PR middle-end/37432 diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 8324f09aaa2a..a54999b56ff6 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;