[gcc r16-1698] Fortran: Prevent creation of unused tree.
Andre Vehreschild
vehre@gcc.gnu.org
Thu Jun 26 08:45:04 GMT 2025
https://gcc.gnu.org/g:24940ad1534aa71ed74cf059982446c6df1f3f74
commit r16-1698-g24940ad1534aa71ed74cf059982446c6df1f3f74
Author: Andre Vehreschild <vehre@gcc.gnu.org>
Date: Wed Jun 25 12:27:35 2025 +0200
Fortran: Prevent creation of unused tree.
gcc/fortran/ChangeLog:
* trans.cc (gfc_allocate_using_malloc): Prevent possible memory
leak when allocation was already done.
Diff:
---
gcc/fortran/trans.cc | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc
index fdeb1e89a765..13fd5ad498da 100644
--- a/gcc/fortran/trans.cc
+++ b/gcc/fortran/trans.cc
@@ -822,6 +822,7 @@ gfc_allocate_using_malloc (stmtblock_t * block, tree pointer,
tree tmp, error_cond;
stmtblock_t on_error;
tree status_type = status ? TREE_TYPE (status) : NULL_TREE;
+ bool cond_is_true = cond == boolean_true_node;
/* If successful and stat= is given, set status to 0. */
if (status != NULL_TREE)
@@ -834,11 +835,13 @@ gfc_allocate_using_malloc (stmtblock_t * block, tree pointer,
tmp = fold_build2_loc (input_location, MAX_EXPR, size_type_node,
size, build_int_cst (size_type_node, 1));
- tmp = build_call_expr_loc (input_location,
- builtin_decl_explicit (BUILT_IN_MALLOC), 1, tmp);
- if (cond == boolean_true_node)
+ if (!cond_is_true)
+ tmp = build_call_expr_loc (input_location,
+ builtin_decl_explicit (BUILT_IN_MALLOC), 1, tmp);
+ else
tmp = alt_alloc;
- else if (cond)
+
+ if (!cond_is_true && cond)
tmp = build3_loc (input_location, COND_EXPR, TREE_TYPE (tmp), cond,
alt_alloc, tmp);
More information about the Gcc-cvs
mailing list