【问题标题】:LLVM ERROR: Broken function found, compilation aborted! after removeFromParent()LLVM 错误:发现损坏的函数,编译中止!在 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()

有什么想法吗?

【问题讨论】:

    标签: c++ c llvm llvm-clang llvm-ir


    【解决方案1】:

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

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

    【讨论】:

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