aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.cc
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2023-08-16 22:00:49 +0200
committerHarald Anlauf <anlauf@gmx.de>2023-08-16 22:00:49 +0200
commit9ade70bb86c8744f4416a48bb69cf4705f00905a (patch)
tree8f2415d031a6d81ea3723f43bcfd69e16715b352 /gcc/fortran/trans-expr.cc
parent4a2b262597e4a6bc5732d4564673c1e19381dcfa (diff)
downloadgcc-9ade70bb86c8744f4416a48bb69cf4705f00905a.zip
gcc-9ade70bb86c8744f4416a48bb69cf4705f00905a.tar.gz
gcc-9ade70bb86c8744f4416a48bb69cf4705f00905a.tar.bz2
Fortran: fix memleak for character,value dummy of bind(c) procedure [PR110360]
Testcase gfortran.dg/bind_c_usage_13.f03 exhibited a memleak in the frontend occuring when passing a character literal to a character,value dummy of a bind(c) procedure, due to a missing cleanup in the conversion of the actual argument expression. Reduced testcase: program p interface subroutine val_c (c) bind(c) use iso_c_binding, only: c_char character(len=1,kind=c_char), value :: c end subroutine val_c end interface call val_c ("A") end gcc/fortran/ChangeLog: PR fortran/110360 * trans-expr.cc (conv_scalar_char_value): Use gfc_replace_expr to avoid leaking replaced gfc_expr.
Diffstat (limited to 'gcc/fortran/trans-expr.cc')
-rw-r--r--gcc/fortran/trans-expr.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 52cd88f..6e9e76c 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -4044,8 +4044,9 @@ conv_scalar_char_value (gfc_symbol *sym, gfc_se *se, gfc_expr **expr)
gfc_typespec ts;
gfc_clear_ts (&ts);
- *expr = gfc_get_int_expr (gfc_default_character_kind, NULL,
- (*expr)->value.character.string[0]);
+ gfc_expr *tmp = gfc_get_int_expr (gfc_default_character_kind, NULL,
+ (*expr)->value.character.string[0]);
+ gfc_replace_expr (*expr, tmp);
}
else if (se != NULL && (*expr)->expr_type == EXPR_VARIABLE)
{