在某些输入文件上运行自定义clang Frontend工具时出现异常

时间:2017-02-27 06:50:23

标签: c++11 abstract-syntax-tree clang++ llvm-clang libtooling

我根据以下链接编写了一个自定义clang Frontend工具。 http://clang.llvm.org/docs/RAVFrontendAction.html

现在我将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

1 个答案:

答案 0 :(得分:0)

我找到了答案。系统递归深度存在问题。在Windows上,默认递归深度限制为512.因此,在提到的测试用例的情况下,堆栈在达到递归限制之前就会溢出。因此,将递归深度限制减少到27可避免堆栈溢出异常。

类似于模板深度的情况。