【问题标题】:Error in CloneFunctioninto() LLVMCloneFunctioninto() LLVM 中的错误
【发布时间】:2013-05-29 09:11:51
【问题描述】:

我正在尝试将 CFG in 函数复制到一个新函数中,以便对旧函数执行一些操作。 我通过以下代码使用了 CloneFunctionInto

      std::vector<Type*> ArgTypes;
      ValueToValueMapTy VMap;
      FunctionType *FTy = FunctionType::get(F.getFunctionType()->getReturnType(), ArgTypes, F.getFunctionType()->isVarArg());
      Function *NewF = Function::Create(FTy, F.getLinkage(), F.getName());
      SmallVector<ReturnInst*, 8> Returns; 
       CloneFunctionInto(NewF, (Function*) &F, VMap, false, Returns, "_", 0, 0);

在新旧功能中打印每个基本块后出现的错误:

删除时:i32 %

在 Def 被破坏后使用仍然卡住:%cmp1_ = icmp sgt i32 %4, 20

opt: Value.cpp:75: virtual llvm::Value::~Value(): Assertion `use_empty() && "Uses still when a value is destroyed!"' 失败。

0  opt             0x0000000000fc7fe2

1  opt             0x0000000000fc8473

2  libpthread.so.0 0x00007f2b28876cb0

3  libc.so.6       0x00007f2b27ac8425 gsignal + 53

4  libc.so.6       0x00007f2b27acbb8b abort + 379

5  libc.so.6       0x00007f2b27ac10ee

6  libc.so.6       0x00007f2b27ac1192

7  opt             0x0000000000f7cd7d

8  opt             0x0000000000ee3c52

9  opt             0x0000000000f5bddf llvm::LLVMContextImpl::~LLVMContextImpl() + 1999

10 opt             0x0000000000f5ad1c

11 opt             0x0000000000fb9d69 llvm::llvm_shutdown() + 41

12 opt             0x00000000005285b3 main + 7251

13 libc.so.6       0x00007f2b27ab376d __libc_start_main + 237

14 opt             0x0000000000521f91

堆栈转储:

0.  Program arguments: opt -load ../../../Release+Asserts/lib/Blocks.so -blocks 

中止(核心转储)

澄清一下:它为我提供了正确的基本块及其正确的继任者,但由于这个错误它也不能很好地工作

【问题讨论】:

    标签: llvm llvm-3.0


    【解决方案1】:

    您似乎没有适当地复制参数。查看llvm::CloneModule 函数(在lib/Transforms/Utils/CloneModule.cpp 中),了解如何正确使用CloneFunction

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多