aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2025-03-01 15:42:57 +0100
committerHarald Anlauf <anlauf@gmx.de>2025-03-01 20:12:41 +0100
commitf7db0263f792466983f53652fb06268767b35305 (patch)
tree6b73e020fef5207b20fb08c1b9c9d66653a956a6
parenta0d29dd218e7d96f0715360a2ab6fdd8dc9b3446 (diff)
downloadgcc-f7db0263f792466983f53652fb06268767b35305.zip
gcc-f7db0263f792466983f53652fb06268767b35305.tar.gz
gcc-f7db0263f792466983f53652fb06268767b35305.tar.bz2
Fortran: fix front-end memleak after failure during parsing of NULLIFY
gcc/fortran/ChangeLog: * match.cc (gfc_match_nullify): Free matched expression when cleaning up. * primary.cc (match_variable): Initialize result to NULL.
-rw-r--r--gcc/fortran/match.cc1
-rw-r--r--gcc/fortran/primary.cc2
2 files changed, 3 insertions, 0 deletions
diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc
index c3c3305..ec9e587 100644
--- a/gcc/fortran/match.cc
+++ b/gcc/fortran/match.cc
@@ -5071,6 +5071,7 @@ cleanup:
new_st.expr1 = NULL;
gfc_free_expr (new_st.expr2);
new_st.expr2 = NULL;
+ gfc_free_expr (p);
return MATCH_ERROR;
}
diff --git a/gcc/fortran/primary.cc b/gcc/fortran/primary.cc
index 8a38720..161d4c2 100644
--- a/gcc/fortran/primary.cc
+++ b/gcc/fortran/primary.cc
@@ -4298,6 +4298,8 @@ match_variable (gfc_expr **result, int equiv_flag, int host_flag)
locus where, old_loc;
match m;
+ *result = NULL;
+
/* Since nothing has any business being an lvalue in a module
specification block, an interface block or a contains section,
we force the changed_symbols mechanism to work by setting