diff options
author | Harald Anlauf <anlauf@gmx.de> | 2025-03-01 15:42:57 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2025-03-01 20:12:41 +0100 |
commit | f7db0263f792466983f53652fb06268767b35305 (patch) | |
tree | 6b73e020fef5207b20fb08c1b9c9d66653a956a6 | |
parent | a0d29dd218e7d96f0715360a2ab6fdd8dc9b3446 (diff) | |
download | gcc-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.cc | 1 | ||||
-rw-r--r-- | gcc/fortran/primary.cc | 2 |
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 |