From bc062e034fbdb5674fc26d354ef5b4c236aab640 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Fri, 5 Aug 2022 12:03:34 -0700 Subject: [ORC] Fix a memory leak in LLVMOrcIRTransformLayerSetTransform. This function heap-allocates a ThreadSafeModule (the current C bindings assume that TSMs are always heap-allocated), but was failing to free it. Should fix http://llvm.org/PR56953. --- llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp index b7eab6b85ecf..6575bf3e8923 100644 --- a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp +++ b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp @@ -892,7 +892,10 @@ void LLVMOrcIRTransformLayerSetTransform( assert(!TSMRef && "TSMRef was not reset to null on error"); return unwrap(Err); } - return std::move(*unwrap(TSMRef)); + assert(TSMRef && "Transform succeeded, but TSMRef was set to null"); + ThreadSafeModule Result = std::move(*unwrap(TSMRef)); + LLVMOrcDisposeThreadSafeModule(TSMRef); + return std::move(Result); }); } -- cgit v1.2.3