aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>2015-08-31 10:54:36 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2015-08-31 10:54:36 +0000
commitcd55d18e5da549f75cc2ae0bbfb69aa232753c19 (patch)
treed04fceb6086a4283f6c960bd6b0a4aa424dd31d5 /gcc/fortran
parente78549932d92690dd277938fac358c039a5d210d (diff)
downloadgcc-cd55d18e5da549f75cc2ae0bbfb69aa232753c19.zip
gcc-cd55d18e5da549f75cc2ae0bbfb69aa232753c19.tar.gz
gcc-cd55d18e5da549f75cc2ae0bbfb69aa232753c19.tar.bz2
re PR fortran/54833 (Don't wrap __builtin_free(a) in if (a != NULL))
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
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans.c15
-rw-r--r--gcc/fortran/trans.h2
3 files changed, 10 insertions, 13 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 9a75aaa..88c1a11 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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,
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c
index 457c0e2..f30809a 100644
--- a/gcc/fortran/trans.c
+++ b/gcc/fortran/trans.c
@@ -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));
}
diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h
index 541640d..2501403 100644
--- a/gcc/fortran/trans.h
+++ b/gcc/fortran/trans.h
@@ -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. */