所以我正在为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 ++的理解是一个问题,但是我不明白为什么对一个案例的调用会在一个案例中起作用,而在同一个范围内却不起作用。
答案 0 :(得分:4)
LLVMContext
的复制目录和副本分配运算符已明确已删除(请参阅the code here)。
Function::getContext
会将可变引用返回给LLVMContext
。通过分配:
llvm::LLVMContext& context = F.getContext();
您尝试调用已删除的构造函数。你应该携带llvm::LLVMContext&
代替。