<div dir="ltr"><div>Well, if anybody out there comes across a similar problem, I found the solution: create your own LLVMContext object and pass it to the EmitLLVMOnlyAction constructor. If you don't, CodeGenAction creates a temporary context and deletes it when the CodeGenAction is deleted. And the LLVMContext destructor deletes the module that was created, even though you may have a std::unique_ptr to it...</div><div><br></div><div>Geoff<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 4 June 2018 at 14:51, Geoff Levner <span dir="ltr"><<a href="mailto:glevner@gmail.com" target="_blank">glevner@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Greetings, LLVM wizards,</div><div><br></div><div>I am trying to use Clang to compile a function in memory once, then to execute it several times with different parameters. That is, I want to keep the resulting ExecutionEngine instance around and reuse it. (Or, if there is a better way to do this, I am open to suggestions.) (And if this is not the right mailing list for this kind of question, I am open to suggestions, too.)<br></div><div><br></div><div>In the code below, the ExecutionEngine works fine if I use it immediately. But if I return from the function and use it afterward, I get memory corruption and crashes, presumably because it contains references to something that has been deleted. And in fact, if I change the code so that the CodeGenAction is not deleted, it seems to work.</div><div><br></div><div>My question is: why should deleting the CodeGenAction corrupt the ExecutionEngine? Are there other things I should avoid deleting as well? (The following code was adapted from the clang-interpreter example in the v4.0.1 source code.)</div><div><br></div><div>Geoff</div><br></div></blockquote></div></div></div>