mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/53521 (Memory leak with zero-sized array constructor)
2012-05-31 Tobias Burnus <burnus@net-b.de> PR fortran/53521 * trans.c (gfc_deallocate_scalar_with_status): Properly handle the case size == 0. From-SVN: r188062
This commit is contained in:
parent
88af7c1a3b
commit
cc2442cd78
|
@ -1,3 +1,9 @@
|
||||||
|
2012-05-31 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
|
PR fortran/53521
|
||||||
|
* trans.c (gfc_deallocate_scalar_with_status): Properly
|
||||||
|
handle the case size == 0.
|
||||||
|
|
||||||
2012-05-30 Tobias Burnus <burnus@net-b.de>
|
2012-05-30 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR c/53502
|
PR c/53502
|
||||||
|
|
|
@ -1130,15 +1130,12 @@ internal_realloc (void *mem, size_t size)
|
||||||
if (!res && size != 0)
|
if (!res && size != 0)
|
||||||
_gfortran_os_error ("Allocation would exceed memory limit");
|
_gfortran_os_error ("Allocation would exceed memory limit");
|
||||||
|
|
||||||
if (size == 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
} */
|
} */
|
||||||
tree
|
tree
|
||||||
gfc_call_realloc (stmtblock_t * block, tree mem, tree size)
|
gfc_call_realloc (stmtblock_t * block, tree mem, tree size)
|
||||||
{
|
{
|
||||||
tree msg, res, nonzero, zero, null_result, tmp;
|
tree msg, res, nonzero, null_result, tmp;
|
||||||
tree type = TREE_TYPE (mem);
|
tree type = TREE_TYPE (mem);
|
||||||
|
|
||||||
size = gfc_evaluate_now (size, block);
|
size = gfc_evaluate_now (size, block);
|
||||||
|
@ -1169,15 +1166,6 @@ gfc_call_realloc (stmtblock_t * block, tree mem, tree size)
|
||||||
build_empty_stmt (input_location));
|
build_empty_stmt (input_location));
|
||||||
gfc_add_expr_to_block (block, tmp);
|
gfc_add_expr_to_block (block, tmp);
|
||||||
|
|
||||||
/* if (size == 0) then the result is NULL. */
|
|
||||||
tmp = fold_build2_loc (input_location, MODIFY_EXPR, type, res,
|
|
||||||
build_int_cst (type, 0));
|
|
||||||
zero = fold_build1_loc (input_location, TRUTH_NOT_EXPR, boolean_type_node,
|
|
||||||
nonzero);
|
|
||||||
tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node, zero, tmp,
|
|
||||||
build_empty_stmt (input_location));
|
|
||||||
gfc_add_expr_to_block (block, tmp);
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue