From 028dc8957faac7c932bb1ca5836e6395accdcd42 Mon Sep 17 00:00:00 2001 From: Patrick Lerda Date: Wed, 8 May 2024 16:43:14 +0200 Subject: [PATCH] clover: fix memory leak related to optimize Indeed, the object returned by LLVMCreatePassBuilderOptions() was not freed. For instance, this issue is triggered with "piglit/bin/cl-api-build-program": Direct leak of 32 byte(s) in 1 object(s) allocated from: #0 0x7f6b15abdf57 in operator new(unsigned long) (/usr/lib64/libasan.so.6+0xb2f57) #1 0x7f6afff6529e in LLVMCreatePassBuilderOptions llvm-18.1.5/lib/Passes/PassBuilderBindings.cpp:83 #2 0x7f6b1186ee41 in optimize ../src/gallium/frontends/clover/llvm/invocation.cpp:521 #3 0x7f6b1186ee41 in clover::llvm::link_program(std::vector > const&, clover::device const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator >&) ../src/gallium/frontends/clover/llvm/invocation.cpp:554 #4 0x7f6b1150ce67 in link_program ../src/gallium/frontends/clover/core/compiler.hpp:78 #5 0x7f6b1150ce67 in clover::program::link(clover::ref_vector const&, std::__cxx11::basic_string, std::allocator > const&, clover::ref_vector const&) ../src/gallium/frontends/clover/core/program.cpp:78 #6 0x7f6b11401a2b in clBuildProgram ../src/gallium/frontends/clover/api/program.cpp:283 Fixes: 2d4fe5f2297 ("clover/llvm: move to modern pass manager.") Signed-off-by: Patrick Lerda Reviewed-by: Karol Herbst Part-of: (cherry picked from commit df39994d51b4c28201f1b9ca12e572692d8d169c) --- .pick_status.json | 2 +- src/gallium/frontends/clover/llvm/invocation.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index b1974ba2455..95a9d7d5aa5 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4454,7 +4454,7 @@ "description": "clover: fix memory leak related to optimize", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "2d4fe5f229791fde52846b3f583c12508b5109d6", "notes": null diff --git a/src/gallium/frontends/clover/llvm/invocation.cpp b/src/gallium/frontends/clover/llvm/invocation.cpp index 6ab32befbcd..e899b205d22 100644 --- a/src/gallium/frontends/clover/llvm/invocation.cpp +++ b/src/gallium/frontends/clover/llvm/invocation.cpp @@ -513,6 +513,7 @@ namespace { LLVMRunPasses(wrap(&mod), opt_str, tm, opts); LLVMDisposeTargetMachine(tm); + LLVMDisposePassBuilderOptions(opts); } std::unique_ptr