re PR fortran/54833 (Don't wrap __builtin_free(a) in if (a != NULL))
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Mon, 31 Aug 2015 10:54:36 +0000 (10:54 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Mon, 31 Aug 2015 10:54:36 +0000 (10:54 +0000)
PR fortran/54833
* trans.c (gfc_call_free): Don't check if pointer is NULL.
* trans.h (gfc_call_free): Adjust comment.

From-SVN: r227336

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

index 9a75aaae44f027d8cde94061cf9bdd00f76628b3..88c1a117caafa83460198e44f26f4dd3067a7ffd 100644 (file)
@@ -1,3 +1,9 @@
+2015-08-31  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/54833
+       * trans.c (gfc_call_free): Don't check if pointer is NULL.
+       * trans.h (gfc_call_free): Adjust comment.
+
 2015-08-29  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        * trans.c (gfc_call_malloc, gfc_allocate_using_malloc,
index 457c0e252108e91cb4f62bd5ed6af5db8379ec33..f30809a9fda1b33242c79873139f35209bf9a9ad 100644 (file)
@@ -850,23 +850,14 @@ gfc_allocate_allocatable (stmtblock_t * block, tree mem, tree size, tree token,
 }
 
 
-/* Free a given variable, if it's not NULL.  */
+/* Free a given variable.  */
 
 tree
 gfc_call_free (tree var)
 {
-  tree cond, call;
-
-  /* Only evaluate the variable once.  */
-  var = save_expr (fold_convert (pvoid_type_node, var));
-
-  cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, var,
-                         build_int_cst (pvoid_type_node, 0));
-  call = build_call_expr_loc (input_location,
+  return build_call_expr_loc (input_location,
                              builtin_decl_explicit (BUILT_IN_FREE),
-                             1, var);
-  return fold_build3_loc (input_location, COND_EXPR, void_type_node,
-                         cond, call, build_empty_stmt (input_location));
+                             1, fold_convert (pvoid_type_node, var));
 }
 
 
index 541640d1c037e0f66e2f97472039da95b42f443f..25014035d95eeab193e7534d7369a79c22bce4cf 100644 (file)
@@ -642,7 +642,7 @@ void gfc_trans_runtime_check (bool, bool, tree, stmtblock_t *, locus *,
 void gfc_trans_same_strlen_check (const char*, locus*, tree, tree,
                                  stmtblock_t*);
 
-/* Generate a call to free() after checking that its arg is non-NULL.  */
+/* Generate a call to free().  */
 tree gfc_call_free (tree);
 
 /* Allocate memory after performing a few checks.  */