我正在开发一个 llvm 前端。我的问题是,当我使用“存储”指令将值存储在复杂类型的成员中时,会出现分段错误。例如,假设我在模块中定义了 %mytype = type {i32, ...} 之类的类型,然后我使用以下命令将 3 存储在此类型对象的第一个字段中。这个导致段错误的代码有什么问题?
define void f() {
...
%alloc = alloca %mytype*
%myinstance = load %mytype** %alloc
%firstfield = getelementptr %mytype* %myinstance, i32 0, i32 0
store i32 3, i32* %firstfield
...
)