LLVM错误:找到破碎的功能,编译中止!在removeFromParent()之后

时间:2015-09-14 11:37:20

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

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

functiontest(2,x);

我想删除此函数调用(使用llvm传递),当我尝试使用 removeFromParent()这样的函数时:

calledFunction1->removeFromParent();

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

  

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

     

LLVM ERROR:发现功能损坏,编译中止!

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

  

断言`use_empty()&& “当价值被破坏时,使用仍然存在!”'失败。

我更喜欢使用 removeFromParent()

任何想法有什么不对?

1 个答案:

答案 0 :(得分:1)

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

  1. 为什么选择removeFromParent?呼叫指令也必须删除,这是eraseFromParent所做的。
  2. 您是否在删除/删除之前致电replaceAllUsesWith?否则,使用粘在一起。
  3. 您是否删除了该功能或通话指令?这可以解释第一条错误消息。