Чтение LLVM IR из std :: istream

Ранее я спрашивал, как записать, а затем прочитать обратно в / из файла. Код чтения выглядел так:

LLVMContext ctx;
SMDiagnostic diag;
Module *m = ParseIRFile( "my_file", diag, ctx );

Тем не менее, код, который я пытаюсь дооснастить LLVM IR, передает мне просто std::istream&, Как я могу прочитать IR с std::istream?

Я разобрался как пользоваться raw_os_ostream адаптировать std::ostream к raw_ostream для написания модуля, но нет очевидного способа адаптировать код для чтения, например, нет MemoryBuffer который адаптирует std::istream (если я не пропустил это).

2

Решение

Вы должны использовать ParseIR() вместо ParseIRFile(), Это получает MemoryBuffer в качестве параметра, а не имя файла. Вы можете создать MemoryBuffer из StringRef через его getMemBuffer() заводской метод:

/// getMemBuffer - Open the specified memory range as a MemoryBuffer.  Note
/// that InputData must be null terminated if RequiresNullTerminator is true.
static MemoryBuffer *getMemBuffer(StringRef InputData,
StringRef BufferName = "",
bool RequiresNullTerminator = true);

И так как StringRef может быть (даже неявно) построен из std::stringвсе, что вам нужно сделать, это преобразовать ваш std::istream в std::string.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]