diff options
author | Lang Hames <lhames@gmail.com> | 2022-08-05 12:03:34 -0700 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2022-08-05 13:52:03 -0700 |
commit | bc062e034fbdb5674fc26d354ef5b4c236aab640 (patch) | |
tree | 65af35b5b48c6f79f2d14bb54f53805e65304933 | |
parent | 424626953e89ec555501320ce06513aebf8e6aec (diff) |
[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.
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
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); }); } |