2017-02-27 14 views
0

다음 링크에 따라 사용자 정의 clang 프론트 엔드 도구를 작성했습니다. http://clang.llvm.org/docs/RAVFrontendAction.html사용자 정의 clang 실행 중 예외 일부 입력 파일에서 프론트 엔드 도구

정적 분석을 위해 프런트 엔드 도구에 clang 소스 코드를 제공하고 있습니다. 내 도구가이 테스트 케이스에 대한 예외를 던지고 있습니다. https://llvm.org/svn/llvm-project/cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp

이 테스트 케이스의 문서에서 정의되지 않은 동작을 위해 작성되었습니다. 그리고이 테스트에서 ClangTool을 실행하는 동안 컨트롤이 HandleTranslationUnit에 오기 전에도 stackoverflow 예외가 발생합니다.

clang이 위의 테스트 케이스에 대해 AST를 생성 할 수 있으므로 컴파일하는 동안 예외가 발생할 수 있다고 가정합니다. 이제는 입력 소스 파일의 의미에 신경 쓰지 않고 AST 노드를 계속 방문 할 수는없는 것입니다. 정적 분석에만 관심이 있습니다.

이것은 예상되는 동작입니까? 그런 다음 생성 된 AST를 트래버스하고 노드를 방문하는 방법. 나는이 순간에 정말로 붙어있어 진행 방법을 모른다. 이 문제를 해결할 수 있도록 도와 주시겠습니까?

미리 감사드립니다.

감사합니다, 인 Hemant Bhagat

답변

0

나는 답을 발견했다. 시스템 재귀 깊이에 문제가 있습니다. Windows에서 기본 재귀 깊이 제한은 512입니다. 따라서 문제의 언급 된 테스트 케이스의 경우 스택은 재귀 한계에 도달하기 전에 오버플로가 발생합니다. 따라서 재귀 깊이 제한을 27로 줄이면 스택 오버플로 예외가 발생하지 않습니다.

템플릿 깊이와 비슷합니다.