aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2024-10-29 21:52:27 +0100
committerHarald Anlauf <anlauf@gmx.de>2024-10-30 11:20:10 +0100
commitb8291710e3a6d9f116fc9d4afba444ad697937f2 (patch)
tree561be32b5e4941daee2ba7c4ee5a25228e9cdb17 /gcc
parentdf11cb0bc4ef9f12c2315c2833be3900a2847965 (diff)
downloadgcc-b8291710e3a6d9f116fc9d4afba444ad697937f2.zip
gcc-b8291710e3a6d9f116fc9d4afba444ad697937f2.tar.gz
gcc-b8291710e3a6d9f116fc9d4afba444ad697937f2.tar.bz2
Fortran: fix several front-end memleaks
gcc/fortran/ChangeLog: * trans-expr.cc (gfc_trans_class_init_assign): Free intermediate gfc_expr's. * trans.cc (get_final_proc_ref): Likewise. (get_elem_size): Likewise. (gfc_add_finalizer_call): Likewise.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/trans-expr.cc2
-rw-r--r--gcc/fortran/trans.cc5
2 files changed, 7 insertions, 0 deletions
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index ff8cde9..ddbb5ec 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -1890,6 +1890,8 @@ gfc_trans_class_init_assign (gfc_code *code)
}
gfc_add_expr_to_block (&block, tmp);
+ gfc_free_expr (lhs);
+ gfc_free_expr (rhs);
return gfc_finish_block (&block);
}
diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc
index 58b93e2..1a0ba63 100644
--- a/gcc/fortran/trans.cc
+++ b/gcc/fortran/trans.cc
@@ -1128,6 +1128,9 @@ get_final_proc_ref (gfc_se *se, gfc_expr *expr, tree class_container)
if (POINTER_TYPE_P (TREE_TYPE (se->expr)))
se->expr = build_fold_indirect_ref_loc (input_location, se->expr);
+
+ if (expr->ts.type != BT_DERIVED && !using_class_container)
+ gfc_free_expr (final_wrapper);
}
@@ -1155,6 +1158,7 @@ get_elem_size (gfc_se *se, gfc_expr *expr, tree class_container)
gfc_conv_expr (se, class_size);
gcc_assert (se->post.head == NULL_TREE);
+ gfc_free_expr (class_size);
}
}
@@ -1467,6 +1471,7 @@ gfc_add_finalizer_call (stmtblock_t *block, gfc_expr *expr2,
gfc_add_expr_to_block (block, tmp);
gfc_add_block_to_block (block, &final_se.post);
+ gfc_free_expr (expr);
return true;
}