Running the jit testsuite under valgrind showed various memory leaks. Some are per-invocation of the compiler, and hence only affect libgccjit.so (although presumably it's useful to cc1 etc to get valgrind clean).
Others appear to be per-function and hence affect the non-JIT use cases. The following patch kit fixes most of the leaks. It also adds a contrib/valgrind.supp suppressions file, for sparseset (though I see now that gcc/configure.ac can detect if valgrind/memcheck.h is available and use it if --enable-valgrind-annotations Should I instead require that option when doing such testing?). Successfully bootstrapped®rtested the cumulative effect of the patches on x86_64-unknown-linux-gnu (Fedora 20). Are the non-JIT parts OK for trunk? (Presumably I can give myself approval for the JIT parts) David Malcolm (21): PR jit/63854: Fix memory leak within gcc_options PR jit/63854: Fix memory leak of reginfo.c: valid_mode_changes_obstack PR jit/63854: Fix memory leaks within context/pass_manager/dump_manager PR jit/63854: Fix memory leak within bb-reorder.c PR jit/63854: Fix memory leak of save_decoded_options PR jit/63854: Fix leak of opts_obstack PR jit/63854: Fix leak of optimization_summary_obstack PR jit/63854: Add ira_costs_c_finalize PR jit/63854: Don't leak producer_string in dwarf2out.c PR jit/63854: Fix leak of worklist within jit-recording.c PR jit/63854: Fix leak of "avail" within tree-ssa-pre.c PR jit/63854: Add a valgrind suppresion file PR jit/63854: Add support for running "make check-jit" under valgrind PR jit/63854: Fix leak of paths within jump threading PR jit/63854: lra.c: Fix leak of point_freq_vec's buffer when calling lra_inheritance PR jit/63854: Add all_late_ipa_passes to GCC_PASS_LISTS PR jit/63854: Fix leaking vec in jit PR jit/63854: Add "long-term" allocator to gcc::context PR jit/63854: Fix leak of ipa hooks PR jit/63854: Fix leak in ipa-icf.c PR jit/63854: Fix leaks in test-fuzzer.c contrib/valgrind.supp | 11 ++++++ gcc/bb-reorder.c | 2 +- gcc/config/alpha/alpha.c | 4 +- gcc/config/i386/i386.c | 2 +- gcc/config/rl78/rl78.c | 4 +- gcc/config/rs6000/rs6000.c | 2 +- gcc/context.c | 24 ++++++++++++ gcc/context.h | 47 +++++++++++++++++++++++ gcc/dumpfile.c | 47 +++++++++++++++++------ gcc/dumpfile.h | 11 +++++- gcc/dwarf2out.c | 2 + gcc/ipa-icf.c | 1 + gcc/ipa-prop.c | 3 +- gcc/ipa-reference.c | 17 +++++++- gcc/ira-costs.c | 6 +++ gcc/ira.h | 3 ++ gcc/jit/jit-playback.c | 73 +++++++++++++++++++++++++++++------ gcc/jit/jit-playback.h | 27 ++++++++----- gcc/jit/jit-recording.c | 19 +++++---- gcc/jit/jit-recording.h | 26 ++++++------- gcc/lra.c | 1 + gcc/opts.c | 8 ++++ gcc/opts.h | 1 + gcc/pass_manager.h | 3 ++ gcc/passes.c | 39 ++++++++++++++++++- gcc/reginfo.c | 2 +- gcc/statistics.c | 3 +- gcc/testsuite/jit.dg/jit.exp | 79 +++++++++++++++++++++++++++++++++++++- gcc/testsuite/jit.dg/test-fuzzer.c | 6 +++ gcc/toplev.c | 20 ++++++++-- gcc/tree-ssa-pre.c | 2 +- gcc/tree-ssa-threadedge.c | 1 + gcc/tree-ssa-threadupdate.c | 1 + gcc/tree.c | 17 +++++--- 34 files changed, 434 insertions(+), 80 deletions(-) create mode 100644 contrib/valgrind.supp -- 1.8.5.3