LLVM Function::getContext() - private在此上下文中

LLVM Function::getContext() - private within this context

本文关键字:上下文 private Function getContext LLVM      更新时间:2023-10-16

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

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

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

一切都很好。

但是如果我这样做:

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

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

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++的理解的一个问题,但我不明白为什么调用访问器会在一种情况下工作,但不是另一个,在同一范围内。

LLVMContext的复制操作符和复制赋值操作符被显式地删除(参见这里的代码)。

Function::getContext返回一个可变引用LLVMContext。通过赋值:

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

您正在尝试调用已删除的构造函数。你应该随身携带llvm::LLVMContext&