我正在尝试使用LLVM构建存储区指令构建器为以下代码构建一个空指针:
int *x;
x = 0;
我面临的问题是,当为x分配零时,我得到一个不兼容的类型错误,因为0是i32类型而x是i32 **类型。 我正在使用LLVMPointerType为零创建指针类型并在BuildStore构建器中使用它,但LLVMPointerType返回LLVMTypeRef,而BuildStore需要LLVMValueRef参数类型。 我被困在无法输入演员表并且真的可以使用一些帮助。
还有另一种在LLVM中创建NULL指针的方法吗?
答案 0 :(得分:0)
如果你刚刚创建一个空指针后,你几乎就在那里 - 你有一个你想要的类型的引用(在这种情况下是i32*
),现在你有了创建该类型的常量。在这种情况下,您可以使用LLVMConstPointerNull
函数来获取表示给定类型的空指针的值。
更一般地说,如果您以整数值开头并想将其强制转换为指针值,则可以使用LLVMBuildIntToPtr
创建inttoptr
constexpr或指令。