我正在编写一个玩具编译器,我使用llvm 10作为它的后端。我想要的特性之一是链表类型,就像函数式编程一样。下面我提供的IR是由我的编译器生成的,
我不能给你代码,因为它有几千行,而且是用生锈写的。我编译了带有断言的llvm,所以我不认为有问题。我非常确定我会生成某种奇怪的返回值,因为程序只有在返回list_type时才会分段。
此代码错误分配,并且不释放任何数据。这是因为我稍后将其更改为使用垃圾收集器,这也不是问题所在。
问题是,你能找到它在运行时出现分段的原因吗?这也可以为我提供一个windows可执行文件,如果有人想要它。
def main():
list[int] j
int i
def list[int] test():
list[int] j
j := 5 # j
j := 10 # j
return j
end
j := test()
i := head(j)
puti(head(j))
end生成的LLVM-IR代码为here
发布于 2020-04-21 15:41:10
多亏了@arnt,我找到了解决方案。我基本上生成了错误的llvm-ir,因为我一个接一个地创建了两条返回指令。这会导致llvm出现未定义的行为,所以我建议使用llvm附带的verifier在编译前检查生成代码的完整性。
https://stackoverflow.com/questions/61329817
复制相似问题