2017-03-26 7 views
0

llvm3.6.2에서 llvm3.8.1로 프로젝트를 마이그레이션하려고합니다. 내 코드에서, 나는 AliasAnalysis을 사용하고 다음과 같이 내 코드를 변경하고 있습니다 :llvm3.8.1에서 AAResultsWrapperPass를 사용하는 중 세그먼트가 잘못되었습니다.

#if defined(DDP_LLVM_VERSION_3_8) 
AU.addRequired<AAResultsWrapperPass>(); 
#else 
AU.addRequired<AliasAnalysis>(); 
#endif 

을 그리고 난 다음과 같이 함수에 AliasAnalysis를 전달하고있다 :

#if defined(DDP_LLVM_VERSION_3_8) 
foo(*F,getAnalysis<AAResultsWrapperPass>().getAAResults()); 
#else 
foo(*F,getAnalysis<AliasAnalysis>()); 
#endif 

함수 선언은 다음과 같다 :

void foo(Function &F, AliasAnalysis &AA);

이 코드는 올바르게 컴파일됩니다. 그러나 이것을 실행할 때 다음과 같은 오류가 발생합니다.

#0 0x0000000001558e19 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/llvm/llvm-3.8/llvm-3.8.1.src/lib/Support/Unix/Signals.inc:322:0 
#1 0x0000000001559195 PrintStackTraceSignalHandler(void*) /home/llvm/llvm-3.8/llvm-3.8.1.src/lib/Support/Unix/Signals.inc:380:0 
#2 0x00000000015578f6 llvm::sys::RunSignalHandlers() /home/llvm/llvm-3.8/llvm-3.8.1.src/lib/Support/Signals.cpp:44:0 
#3 0x000000000155891d SignalHandler(int) /home/llvm/llvm-3.8/llvm-3.8.1.src/lib/Support/Unix/Signals.inc:210:0 
#4 0x00007f7d30b5b370 __restore_rt (/lib64/libpthread.so.0+0xf370) 
#5 0x0000000000b04251 llvm::AAResultsWrapperPass& llvm::Pass::getAnalysisID<llvm::AAResultsWrapperPass>(void const*) const /home/llvm/llvm-3.8/install/include/llvm/PassAnalysisSupport.h:242:0 
#6 0x0000000000b04251 llvm::AAResultsWrapperPass& llvm::Pass::getAnalysis<llvm::AAResultsWrapperPass>() const /home/llvm/llvm-3.8/install/include/llvm/PassAnalysisSupport.h:223:0 
+0

문제 작업은 getAnalysis'에 () getAAResults()'이 문.. 'PassAnalysisSupport.h : 223'에 함수의 인수를 표시하려고하면 이 표시되고이 문제가 있다고 생각합니다. 또한 다른 패스에서는 실제로 인수를 볼 수 있기 때문에 제대로 작동합니다. – user413201

답변

0

모듈 패스에서 getAnalysis<AAResultsWrapperPass>().getAAResults()으로 전화를 걸었습니다. 이 함수에 대한 인수로 현재 함수를 전달하면 문제가 해결됩니다.

getAnalysis<AAResultsWrapperPass>().getAAResults() - getAnalysis<AAResultsWrapperPass>().getAAResults(F) 작동하지 않음 -