2017-12-17 20 views
0

사용자 정의 (소스 파일에서 사용자가 정의) 한 경우에만 함수 이름을 인쇄하는 LLVM 패스를 쓰고 있습니다.함수가 LLVM-IR에서 사용자 정의인지 확인하십시오.

사용자 정의 함수와 초기화 함수 (또는 정적 생성자)를 구별 할 수있는 방법이 없습니다. 함수가 방금 선언 또는 정의되었는지 확인하려고했지만 일부 초기화 함수 (예 : __cxx_global_var_init)가 정의 된대로 작동하지 않습니다.

답변

0

패스 할 때, 나는 당신이하려는 일을 성취 할 수있는 방법이 없다는 것을 알고 있습니다.

즉, Clang은 초기 컴파일 중에이를 확인하는 방법을 제공합니다. 참조 : clang::SourceManager::isInSystemHeader(). opt가 실행되면 정보가 사라짐에 따라 이것을 이용하려면 Clang 플러그인이나 libTooling 기반 프로그램을 작성해야합니다. 다음은 AST 방문자를 사용하는 방법을 고안 한 예입니다.

bool VisitFunctionDecl(clang::FunctionDecl* funcDecl) 
{ 
    if (sourceManager.isInSystemHeader(funcDecl->getLocStart())) 
    { 
    return true; 
    } 
}