valgrind leak check complains ==8747== 16 bytes in 2 blocks are definitely lost in loss record 6 of 2,309 ==8747== at 0x4C346A4: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==8747== by 0x5697698: __gmp_default_allocate (in /usr/lib64/libgmp.so.10.3.2) ==8747== by 0x56A7A22: __gmpz_init_set (in /usr/lib64/libgmp.so.10.3.2) ==8747== by 0x874110: do_subscript (frontend-passes.cc:2863) ==8747== by 0x874110: do_function(gfc_expr**, int*, void*) (frontend-passes.cc:2710) ==8747== by 0x870675: gfc_expr_walker(gfc_expr**, int (*)(gfc_expr**, int*, void*), void*) (frontend-passes.cc:5243) ==8747== by 0x870859: gfc_expr_walker(gfc_expr**, int (*)(gfc_expr**, int*, void*), void*) (frontend-passes.cc:5250) ==8747== by 0x870859: gfc_expr_walker(gfc_expr**, int (*)(gfc_expr**, int*, void*), void*) (frontend-passes.cc:5250) ==8747== by 0x8727D9: gfc_code_walker(gfc_code**, int (*)(gfc_code**, int*, void*), int (*)(gfc_expr**, int*, void*), void*) (frontend-passes.cc:5680) ==8747== by 0x872857: gfc_code_walker(gfc_code**, int (*)(gfc_code**, int*, void*), int (*)(gfc_expr**, int*, void*), void*) (frontend-passes.cc:5687) ==8747== by 0x872857: gfc_code_walker(gfc_code**, int (*)(gfc_code**, int*, void*), int (*)(gfc_expr**, int*, void*), void*) (frontend-passes.cc:5687) ==8747== by 0x872857: gfc_code_walker(gfc_code**, int (*)(gfc_code**, int*, void*), int (*)(gfc_expr**, int*, void*), void*) (frontend-passes.cc:5687) ==8747== by 0x8738CB: doloop_warn(gfc_namespace*) (frontend-passes.cc:3079) so it looks like some gmp vars are not released.
Created attachment 54532 [details] Tentative patch Does the attached fix this? Without a testcase this seems to be the fix obtained from reviewing the surrounding code. Regtests cleanly here.
The master branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:45f406c4f62e516b58dcda20b5a7aa43ff0aa0f3 commit r13-6336-g45f406c4f62e516b58dcda20b5a7aa43ff0aa0f3 Author: Harald Anlauf <anlauf@gmx.de> Date: Fri Feb 24 19:56:32 2023 +0100 Fortran: frontend passes do_subscript leaks gmp memory [PR108924] gcc/fortran/ChangeLog: PR fortran/108924 * frontend-passes.cc (do_subscript): Clear used gmp variable.
Taken. Waiting on feedback.
Building the benchmark set fprate_any_fortran of SPEC CPU 2017 there's no leak from an allocation in do_subscript or do_function anymore.