У меня есть небольшой парсер языка, который использует LLVM для генерации и запуска кода на основе учебника Kaleidoscope.Как освободить llvm :: module
Мое ограничение заключается в том, что мне нужно воссоздать модуль, потому что мне нужно обрабатывать один и тот же файл ввода несколько раз, а после первой компиляции LLVM будет жаловаться на модуль, уже содержащий функции x и т. Д. Единственный путь вперед Я вижу, это воссоздать модуль между ними, и это означает, что я должен воссоздать ExecutionEngine
.
Однако, существует огромное количество утечек памяти, которые я хочу избавиться. Как правильно освободить llvm::Module
и llvm::ExecutionEngine
?
Если я просто удалю оба, это segfaults где-то в LLVM. Моя текущая реализация выглядит следующим образом:
TheExecutionEngine->removeModule(module);
delete module();
delete TheExecutionEngine;
Однако, есть еще около 14 тысяч утечек сообщили, так что это кажется неправильным.
Мне не нужно дублировать существующие функции в модуле. Я просто хочу новый, пустой.
Вы посмотрели CloneModule? Может помочь в первую очередь дублировать модуль - http://llvm.org/docs/doxygen/html/CloneModule_8cpp_source.html#l00034 –