https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113911

--- Comment #4 from anlauf at gcc dot gnu.org ---
Running f951 on the testcase under valgrind shows (among others) a
frontend memleak in gfc_resolve_substring_charlen, obviously fixed by

diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 44f89f6afb4..b1f36efb10b 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -5392,11 +5392,7 @@ gfc_resolve_substring_charlen (gfc_expr *e)
     end = NULL;

   if (!start || !end)
-    {
-      gfc_free_expr (start);
-      gfc_free_expr (end);
-      return;
-    }
+    goto cleanup;

   /* Length = (end - start + 1).
      Check first whether it has a constant length.  */
@@ -5431,6 +5427,10 @@ gfc_resolve_substring_charlen (gfc_expr *e)
   /* Make sure that the length is simplified.  */
   gfc_simplify_expr (e->ts.u.cl->length, 1);
   gfc_resolve_expr (e->ts.u.cl->length);
+
+cleanup:
+  gfc_free_expr (start);
+  gfc_free_expr (end);
 }

Reply via email to