This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix memory leak in Fortran FE with init_emit
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Tobias Burnus <burnus at net-b dot de>
- Cc: gcc-patches at gcc dot gnu dot org, fortran at gcc dot gnu dot org
- Date: Wed, 22 Aug 2012 15:03:14 +0200
- Subject: [PATCH] Fix memory leak in Fortran FE with init_emit
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
init_function_start is these days supposed to be called only at the start of
RTL expansion, it shouldn't be called much earlier, because then we leak
e.g. the memory allocated by init_emit.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
2012-08-22 Jakub Jelinek <jakub@redhat.com>
* trans-decl.c (trans_function_start, generate_coarray_init,
create_main_function, gfc_generate_constructors): Call
allocate_struct_function instead of init_function_start.
--- gcc/fortran/trans-decl.c.jj 2012-08-13 14:36:51.000000000 +0200
+++ gcc/fortran/trans-decl.c 2012-08-22 12:18:29.963953958 +0200
@@ -2265,7 +2265,8 @@ trans_function_start (gfc_symbol * sym)
/* Create RTL for function definition. */
make_decl_rtl (fndecl);
- init_function_start (fndecl);
+ gcc_checking_assert (DECL_STRUCT_FUNCTION (fndecl) == NULL);
+ allocate_struct_function (fndecl, false);
/* function.c requires a push at the start of the function. */
pushlevel ();
@@ -4408,7 +4409,8 @@ generate_coarray_init (gfc_namespace * n
rest_of_decl_compilation (fndecl, 0, 0);
make_decl_rtl (fndecl);
- init_function_start (fndecl);
+ gcc_checking_assert (DECL_STRUCT_FUNCTION (fndecl) == NULL);
+ allocate_struct_function (fndecl, false);
pushlevel ();
gfc_init_block (&caf_init_block);
@@ -4982,7 +4984,8 @@ create_main_function (tree fndecl)
rest_of_decl_compilation (ftn_main, 1, 0);
make_decl_rtl (ftn_main);
- init_function_start (ftn_main);
+ gcc_checking_assert (DECL_STRUCT_FUNCTION (ftn_main) == NULL);
+ allocate_struct_function (ftn_main, false);
pushlevel ();
gfc_init_block (&body);
@@ -5537,7 +5540,8 @@ gfc_generate_constructors (void)
make_decl_rtl (fndecl);
- init_function_start (fndecl);
+ gcc_checking_assert (DECL_STRUCT_FUNCTION (fndecl) == NULL);
+ allocate_struct_function (fndecl, false);
pushlevel ();
Jakub