2013-05-29 7 views
1

함수의 CFG를 새 함수로 복사하여 이전 함수로 일부 작업을 수행하려고합니다.CloneFunctioninto() 오류 LLVM

사용은 여전히 ​​후 주위에 붙어 I32의 % 삭제하는 동안

: 는 다음 코드

 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); 

나는 새로운 오래된 기능에서 각 기본 블록을 인쇄 한 후 가지고 오류에 의해 CloneFunctionInto 사용 데프 파괴 % cmp1_ = ICMP 하사관의 I32 % 4, 20

옵트 : Value.cpp : 75 : 가상 LLVM :: 값이 :: ~ 값() : 어설`use_empty()가 & & "이 때 남아 사용값이 파괴되었습니다! " '실패했습니다.

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 

중단됨 (코어 덤프)

더 명확히하기 위해 : 그것은 나에게 올바른 후계자로 올바른 기본 블록을 제공하지만, 그것은 또한 잘 작동하지 않습니다 이 오류로 인해

답변

1

제대로 인수를 복사하지 않는 것처럼 보입니다. llvm::CloneModule 기능 (lib/Transforms/Utils/CloneModule.cpp)을보고 CloneFunction을 올바르게 사용하는 방법을 확인하십시오.