PR fortran/33592
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 10 Nov 2007 18:02:18 +0000 (18:02 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 10 Nov 2007 18:02:18 +0000 (18:02 +0000)
* trans.c (gfc_call_realloc): Fix the logic and rename variables.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130072 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans.c

index 4306a92..8e28ef5 100644 (file)
@@ -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
index d2e2b5a..1232272 100644 (file)
@@ -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);