编写以LLVM IR文件作为命令行参数的程序

时间:2018-08-10 11:27:31

标签: c++ c++11 llvm llvm-ir

我正在编写一个main.cpp文件来测试LLVM IR命令行参数。

我正在使用llvm版本:6.0.1

#include<iostream>
#include <llvm/Bitcode/BitcodeReader.h>
#include <llvm/Bitcode/BitcodeWriter.h>
#include "llvm/IR/Function.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
#include <llvm/Support/Error.h>
#include <llvm/IRReader/IRReader.h>
using namespace llvm;
using namespace std;

static cl::opt<string> input(cl::Positional, cl::desc("Bitcode file"), cl::Required);
int main(int argc, char** argv)
{
cl::ParseCommandLineOptions(argc, argv, "LLVM IR to Bytecode \n");
LLVMContext context;

ErrorOr<std::unique_ptr<MemoryBuffer>> mb = MemoryBuffer::getFile(input);
if (error_code ec = mb.getError()) {
    errs() << ec.message();
    return -1;
}
 ErrorOr<std::unique_ptr<Module>> m=parseBitcodeFile(mb->get()->getMemBufferRef(), context);
  if (error_code ec = m.getError())
{
    errs() << "Error reading bitcode: " << ec.message() << "\n";
    return -1;
}
return 0;
}

我收到此错误:

  

错误:“类llvm :: Expected>”没有名为“ getError”的成员      如果(error_code ec = m.getError())

我在Google上搜索过很多次,但在任何地方都找不到答案。请给我建议一些解决方案。

1 个答案:

答案 0 :(得分:0)

以上错误是由于LLVM API随时间变化而引起的。更改模块读取器功能以返回llvm::Expected <T> [] https://reviews.llvm.org/D26562 。此类与ErrorOr相似,但将error_code替换为Error。由于无法复制Error,因此此类将takeError().

替换为getError()

因此上述代码更改为:

Expected<std::unique_ptr<Module>> m = parseBitcodeFile(mb->get()->getMemBufferRef(), context);
    if (std::error_code ec = errorToErrorCode(m.takeError())) {
    errs() << "Error reading bitcode: " << ec.message() << "\n";
    return -1;
  }