LLVM 错误:发现损坏的函数,编译中止!在 removeFromParent() 之后

Posted

技术标签:

【中文标题】LLVM 错误:发现损坏的函数,编译中止!在 removeFromParent() 之后【英文标题】:LLVM ERROR: Broken function found, compilation aborted! after removeFromParent() 【发布时间】:2015-09-14 11:37:20 【问题描述】:

我有一个 test.c 文件,它有这个函数调用:

functiontest(2,x);

我想删除这个函数调用(使用 llvm 通行证),当我尝试像这样使用 removeFromParent() 函数时:

calledFunction1->removeFromParent();

这会导致 LLVM 产生以下错误:

在另一个模块中引用函数! 调用 void @functiontest(i32 2, float %tmp15)

LLVM 错误:发现损坏的函数,编译中止!

我也尝试调用 eraseFromParent() 但这会触发断言:

断言 `use_empty() && "当一个值被销毁时使用仍然存在!"' 失败。

我更喜欢使用 removeFromParent()

有什么想法吗?

【问题讨论】:

【参考方案1】:

首先,如果您可以发布一个演示您的问题的最小代码示例,那将非常有帮助。否则,我们只能猜测。不过有一些观察:

    为什么你更喜欢removeFromParent?调用指令也必须删除,这就是eraseFromParent 所做的。 在擦除/删除之前您是否致电replaceAllUsesWith?否则,使用坚持。 您是否删除了函数或调用指令?这可以解释第一条错误消息。

【讨论】:

我只想删除这个调用而不是函数 @strayrebel:是的,但我不确定你在那里做的事情是正确的。来自 LLVM 验证程序的错误消息表明所有权已损坏。这就是为什么最好将您的问题减少最小代码示例并展示它 嗯是的,我可能没有做正确的事。也许,我最好尝试删除只调用该函数的指令。

以上是关于LLVM 错误:发现损坏的函数,编译中止!在 removeFromParent() 之后的主要内容,如果未能解决你的问题,请参考以下文章

Mercurial 中止:索引 ... 已损坏

解决 LLVM 错误提示 may only occur zero or one times!

解决 LLVM 错误 cannot specify -o when generating multiple output files

Azure 媒体服务 - 视频播放因损坏而中止... (0x20400003)

RE 错误:Mac OS X 上的非法字节序列

llvm编译makefile152错误