From cd55d18e5da549f75cc2ae0bbfb69aa232753c19 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Mon, 31 Aug 2015 10:54:36 +0000 Subject: [PATCH] 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 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans.c | 15 +++------------ gcc/fortran/trans.h | 2 +- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9a75aaae44f..88c1a117caa 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2015-08-31 Francois-Xavier Coudert + + 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 * trans.c (gfc_call_malloc, gfc_allocate_using_malloc, diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index 457c0e25210..f30809a9fda 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 541640d1c03..25014035d95 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. */ -- 2.30.2