https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110063
Bug ID: 110063
Summary: Leaks in gcc driver accumulate when calling
gcc_jit_context_compile
Product: gcc
Version: 13.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: jit
Assignee: dmalcolm at gcc dot gnu.org
Reporter: eliaz.pitavy at obspm dot fr
Target Milestone: ---
Created attachment 55224
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55224&action=edit
Full output of ASan with -fsanitize=address
Local build of gcc 13.1.0
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-13.1.0/configure --prefix=/home/epitavy/.local/
--disable-multilib --enable-host-shared --enable-languages=all
The following code is compiled with these options:
g++ --std=c++2a -fsanitize=address -I ~/.local leak.cc -lgccjit -L ~/.local -o
leak
The content of the file (leak.cc):
#include <libgccjit++.h>
int main(){
gccjit::context ctx = gccjit::context::acquire();
gcc_jit_result *result;
for (int i = 0; i < 100; i++) {
result = ctx.compile();
gcc_jit_result_release(result);
}
ctx.release();
}
Here a truncated ASan report, the full report is in attachment:
SUMMARY: AddressSanitizer: 855270 byte(s) leaked in 5886 allocation(s)
xmalloc ../../gcc-13.1.0/libiberty/xmalloc.c:149
make_temp_file_with_prefix ../../gcc-13.1.0/libiberty/make-temp-file.c:213
...
handle_braces ../../gcc-13.1.0/gcc/gcc.cc:7252
do_spec_1 ../../gcc-13.1.0/gcc/gcc.cc:6659
do_spec_2 ../../gcc-13.1.0/gcc/gcc.cc:5713
do_spec(char const*) ../../gcc-13.1.0/gcc/gcc.cc:5677
driver::do_spec_on_infiles() const ../../gcc-13.1.0/gcc/gcc.cc:8903
driver::main(int, char**) ../../gcc-13.1.0/gcc/gcc.cc:8131
When using gcc as a standalone program, the memory leaks of the driver are not
important, but when integrated into a program with jit compilation, each
compilation triggers new memory leaks, independently of the user code.
The leak is not related directly with libgccjit but matters for its use case.