我正在尝试使用 GEP 从数组中获取 i32 的指针。
但问题是:我不知道数组的大小。
llvm.org 上的 IR 文档说 GEP 只是将偏移量添加到基地址中,并采用静默包装二进制补码算法。
所以,我想请教一些建议。像这样安全吗:
%v1 = alloca i32
store i32 5, i32* %v1
%6 = load i32* %v1
%7 = bitcast i32* %v0 to [1 x i32]*
%8 = getelementptr [1 x i32]* %7, i32 0, i32 %6
%9 = load i32* %8
store i32 %9, i32* %v0
%v0 的类型是 i32*,我知道 %v0 指向 mem 中的一个数组,但大小是 9,而不是 1。然后我从 %7 中“GEP”,我将其视为 [1 x i32] ,不是 [9 x i32],但“偏移量”是 5(%6)。
那么,有什么问题吗?不安全,或者只是不好但基本上可以?