在LLVM IR中设置指针值

在LLVM IR中设置指针值,llvm,llvm-ir,Llvm,Llvm Ir,我在llvm IR中有一个int32_t*类型变量,用于存储int32所在位置的地址 我想在llvm ir中设置此int32_t*变量的值 假设地址是1223。然后我尝试了以下方法。这是正确的吗?它似乎不起作用 store i64 1223, i32** %1 我将地址1223存储在一个int64_t常量int中(因为这是一个64位机器),并创建一个存储指令,将该值存储在存储i32*的内存中 有更好的方法吗?我假设验证过程表明您做错了什么,并且您的存储类型不匹配 您试图将i64变量保存到i32

我在llvm IR中有一个int32_t*类型变量,用于存储int32所在位置的地址

我想在llvm ir中设置此int32_t*变量的值

假设地址是1223。然后我尝试了以下方法。这是正确的吗?它似乎不起作用

store i64 1223, i32** %1
我将地址1223存储在一个int64_t常量int中(因为这是一个64位机器),并创建一个存储指令,将该值存储在存储i32*的内存中


有更好的方法吗?

我假设验证过程表明您做错了什么,并且您的存储类型不匹配

您试图将i64变量保存到i32内存区域,这显然是一个问题。 要使整型变量成为指针,必须使用inttoptr转换转换地址:

store i32* inttoptr (i64 1223 to i32*), i32** %1

所有LLVM指令都是严格类型化的,并且要求操作数保持类型正确性。尽管您的方法可以在C这样的语言中工作,它的类型规则不那么严格,但在LLVM中却不行。必须将整型常量显式转换为指针:

%2 = inttoptr i64 1223 to i32*
store i32* %2, i32** %1
将整数类型转换为指针会使程序“类型不安全”,该程序通过inttoptr指令显式可见


您可以阅读3.6《区分安全代码和不安全代码:LLVM指令集中的cast指令和编译策略》中有关该指令的更多信息:

否,verifyModule对我所做的感到满意。程序运行良好。但我会听从你的建议,因为这似乎是正确的做法。