LLVM函数:: getContext() - 此上下文中的私有

时间:2015-05-15 19:07:23

标签: c++ llvm

所以我正在为LLVM编写FunctionPass,并尝试向函数添加一些调用指令。

如果我这样打电话给Type::getVoidTy();

Type::getVoidTy(F.getContext());

一切都很好。

但是,如果我这样做:

llvm::LLVMContext context = F.getContext();
Type::getVoidTy(context);

当我尝试编译传递时,我得到以下编译错误:

llvm-3.2.src/include/llvm/LLVMContext.h: In member function ‘virtual bool {anonymous}::Hello::runOnFunction(llvm::Function&)’:
llvm-3.2.src/include/llvm/LLVMContext.h:93:3: error: ‘llvm::LLVMContext::LLVMContext(llvm::LLVMContext&)’ is private
   LLVMContext(LLVMContext&) LLVM_DELETED_FUNCTION;
   ^
llvm-3.2.src/lib/Transforms/Hello/Hello.cpp:370:48: error: within this context
       llvm::LLVMContext context = F.getContext();
                                                ^

所以我想这对我对c ++的理解是一个问题,但是我不明白为什么对一个案例的调用会在一个案例中起作用,而在同一个范围内却不起作用。

1 个答案:

答案 0 :(得分:4)

LLVMContext的复制目录和副本分配运算符已明确已删除(请参阅the code here)。

Function::getContext会将可变引用返回给LLVMContext。通过分配:

llvm::LLVMContext& context = F.getContext();

您尝试调用已删除的构造函数。你应该携带llvm::LLVMContext&代替。