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() 之后的主要内容,如果未能解决你的问题,请参考以下文章
解决 LLVM 错误提示 may only occur zero or one times!
解决 LLVM 错误 cannot specify -o when generating multiple output files