2017-02-27 66 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巴格特

回答

0

我找到了答案。系統遞歸深度存在問題。在Windows中,默認的遞歸深度限制是512.所以在提到的測試用例的情況下,即使在達到遞歸限制之前,堆棧也會發生溢出。因此將遞歸深度限制降低到27可以避免堆棧溢出異常。

類似的情況與模板深度。

相關問題