Clang 在LLVM过程中添加简单的printf

Clang 在LLVM过程中添加简单的printf,clang,llvm,Clang,Llvm,我试图通过LLVM通道向程序插入printf调用。printf函数应该只是打印测试。我已经使用了getOrInsertFunction来获取printf函数。之后,我尝试使用CreateCall创建方法。不幸的是,我有一个分割错误。谁能帮我指出错误吗 //声明一些变量 静态语境; Module*Module=F.getParent; IRBuilder buildercall_inst; Type*intType=Type::getInt32Tycontext; //声明C标准库printf s

我试图通过LLVM通道向程序插入printf调用。printf函数应该只是打印测试。我已经使用了getOrInsertFunction来获取printf函数。之后,我尝试使用CreateCall创建方法。不幸的是,我有一个分割错误。谁能帮我指出错误吗

//声明一些变量 静态语境; Module*Module=F.getParent; IRBuilder buildercall_inst; Type*intType=Type::getInt32Tycontext; //声明C标准库printf std::vector printfArgsTypes{Type::getInt8PtrTycontext}; FunctionType*printfType=FunctionType::getintType,printfArgsTypes,true; 常量*printfFunc=module->getOrInsertFunctionprintf,printfType; //printf函数的格式字符串,声明为全局文本 Value*str=builder.CreateGlobalStringPtrtest\n,str; std::向量argsV{str}; builder.createcallprintfunc、argsV、calltmp; LLVM调用的部分错误消息:

void llvm::CallInst::initllvm::FunctionType*,llvm::Value*,llvm::ArrayRef,llvm::ArrayRef,const llvm::Twine&:断言`i>=FTy->getNumParams | | FTy->getParamTypei==Args[i]>getType&&调用具有错误签名的函数失败。
根据伊斯梅尔·巴达维对该问题的评论,以下代码对我有效:

Module*Module=F.getParent; LLVMContext&context=module->getContext; IRBuilder buildercall_inst; //其余的不变
注意从模块中获取上下文而不是声明为静态的方式

什么是调用指令?它是否使用相同的LLVMContext?是的,它应该是相同的上下文。我想它也是从函数中派生出来的。我不能看atm代码。请用完整的代码更新你的问题。我猜你有两个。在这种情况下,可以有两个相同类型的实例,例如i8*但它们的比较并不相等。