diff options
author | Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2007-11-10 18:02:18 +0000 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2007-11-10 18:02:18 +0000 |
commit | 28762eb0895167a26ace60fdf1dd7ab89a6cf035 (patch) | |
tree | 5bf75dff63aadfa87b69ef159faf13cff8cc1bc3 | |
parent | 2272b24c41fcf6948c636946d8caf17d752b4a99 (diff) | |
download | gcc-28762eb0895167a26ace60fdf1dd7ab89a6cf035.zip gcc-28762eb0895167a26ace60fdf1dd7ab89a6cf035.tar.gz gcc-28762eb0895167a26ace60fdf1dd7ab89a6cf035.tar.bz2 |
re PR fortran/33592 (FAIL: gfortran.dg/array_constructor_11.f90 -O1 execution test)
PR fortran/33592
* trans.c (gfc_call_realloc): Fix the logic and rename variables.
From-SVN: r130072
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/trans.c | 15 |
2 files changed, 13 insertions, 7 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4306a92..8e28ef5 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2007-11-10 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + PR fortran/33592 + * trans.c (gfc_call_realloc): Fix the logic and rename variables. + 2007-11-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> PR fortran/33739 diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index d2e2b5a..1232272 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -829,19 +829,19 @@ internal_realloc (void *mem, size_t size) { if (size < 0) runtime_error ("Attempt to allocate a negative amount of memory."); - mem = realloc (mem, size); - if (!mem && size != 0) + res = realloc (mem, size); + if (!res && size != 0) _gfortran_os_error ("Out of memory"); if (size == 0) return NULL; - return mem; + return res; } */ tree gfc_call_realloc (stmtblock_t * block, tree mem, tree size) { - tree msg, res, negative, zero, null_result, tmp; + tree msg, res, negative, nonzero, zero, null_result, tmp; tree type = TREE_TYPE (mem); size = gfc_evaluate_now (size, block); @@ -868,10 +868,10 @@ gfc_call_realloc (stmtblock_t * block, tree mem, tree size) gfc_add_modify_expr (block, res, fold_convert (type, tmp)); null_result = fold_build2 (EQ_EXPR, boolean_type_node, res, build_int_cst (pvoid_type_node, 0)); - zero = fold_build2 (EQ_EXPR, boolean_type_node, size, - build_int_cst (size_type_node, 0)); + nonzero = fold_build2 (NE_EXPR, boolean_type_node, size, + build_int_cst (size_type_node, 0)); null_result = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, null_result, - zero); + nonzero); msg = gfc_build_addr_expr (pchar_type_node, gfc_build_cstring_const ("Out of memory")); tmp = fold_build3 (COND_EXPR, void_type_node, null_result, @@ -881,6 +881,7 @@ gfc_call_realloc (stmtblock_t * block, tree mem, tree size) /* if (size == 0) then the result is NULL. */ tmp = fold_build2 (MODIFY_EXPR, type, res, build_int_cst (type, 0)); + zero = fold_build1 (TRUTH_NOT_EXPR, boolean_type_node, nonzero); tmp = fold_build3 (COND_EXPR, void_type_node, zero, tmp, build_empty_stmt ()); gfc_add_expr_to_block (block, tmp); |