首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时使用LLVM-IR段错误生成的代码

运行时使用LLVM-IR段错误生成的代码
EN

Stack Overflow用户
提问于 2020-04-21 02:49:09
回答 1查看 45关注 0票数 0

我正在编写一个玩具编译器,我使用llvm 10作为它的后端。我想要的特性之一是链表类型,就像函数式编程一样。下面我提供的IR是由我的编译器生成的,

我不能给你代码,因为它有几千行,而且是用生锈写的。我编译了带有断言的llvm,所以我不认为有问题。我非常确定我会生成某种奇怪的返回值,因为程序只有在返回list_type时才会分段。

此代码错误分配,并且不释放任何数据。这是因为我稍后将其更改为使用垃圾收集器,这也不是问题所在。

问题是,你能找到它在运行时出现分段的原因吗?这也可以为我提供一个windows可执行文件,如果有人想要它。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-04-21 15:41:10

多亏了@arnt,我找到了解决方案。我基本上生成了错误的llvm-ir,因为我一个接一个地创建了两条返回指令。这会导致llvm出现未定义的行为,所以我建议使用llvm附带的verifier在编译前检查生成代码的完整性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61329817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档