Clang 如何在getOrInsertFunction()llvm中定义字符串类型?

Clang 如何在getOrInsertFunction()llvm中定义字符串类型?,clang,llvm,instrumentation,Clang,Llvm,Instrumentation,我是llvm的新手,我试着做这个乐器。但我发现LLVMAPI只有基本类型,比如:getInt32Ty(Ctx)。。我想使用getOrInsertFunction()做的是,函数参数类型为string类型。众所周知,当参数类型为int时,我们可以像这样做: LLVMContext &Ctx = F.getContext(); Constant *logFunc = F.getParent()->getOrInsertFunction( "logop", Type::ge

我是llvm的新手,我试着做这个乐器。但我发现LLVMAPI只有基本类型,比如:getInt32Ty(Ctx)。。我想使用getOrInsertFunction()做的是,函数参数类型为string类型。众所周知,当参数类型为int时,我们可以像这样做:

 LLVMContext &Ctx = F.getContext();
  Constant *logFunc = F.getParent()->getOrInsertFunction(
    "logop", Type::getVoidTy(Ctx), Type::getInt32Ty(Ctx), NULL );
Type::getInt32Ty(Ctx)
是函数参数类型(int),我想做的是:

getOrInsertFunction(
    "logop", Type::getVoidTy(Ctx), string type, NULL);

字符串类型我不知道如何定义。简而言之,你能告诉我如何定义它吗,谢谢

LLVM IR不定义任何特殊的字符串或字符类型

通常使用
[N x i8]
i8*
,但这取决于您-例如,Java样式的字符串可能是一个结构,其中一些
i32
表示字符串长度,另一些
i16*
表示UTF-16代码点

LLVM IR确实有一个“字符串文字”,它被键入为
i8
数组-例如
c“hello world\0A\00”
is
[13 x i8]
。但这并不能说明应该使用什么字符串形式

记住,如果你的函数应该与某个东西交互,例如宿主C++应用程序,那么你需要使用相同的字符串类型——在这种情况下,无论是什么代码> STD::String 都编译成。您可以使用Clang或检查该类型