LLVM API指针类型支持

时间:2015-10-01 17:56:22

标签: c pointers llvm llvm-clang llvm-ir

我正在尝试使用LLVM构建存储区指令构建器为以下代码构建一个空指针:

int *x;
x = 0;

我面临的问题是,当为x分配零时,我得到一个不兼容的类型错误,因为0是i32类型而x是i32 **类型。 我正在使用LLVMPointerType为零创建指针类型并在BuildStore构建器中使用它,但LLVMPointerType返回LLVMTypeRef,而BuildStore需要LLVMValueRef参数类型。 我被困在无法输入演员表并且真的可以使用一些帮助。

还有另一种在LLVM中创建NULL指针的方法吗?

1 个答案:

答案 0 :(得分:0)

如果你刚刚创建一个空指针后,你几乎就在那里 - 你有一个你想要的类型的引用(在这种情况下是i32*),现在你有了创建该类型的常量。在这种情况下,您可以使用LLVMConstPointerNull函数来获取表示给定类型的空指针的值。

更一般地说,如果您以整数值开头并想将其强制转换为指针值,则可以使用LLVMBuildIntToPtr创建inttoptr constexpr或指令。