我已经根据下面的链接编写了一个定制的clang前端工具。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之前就会抛出堆栈溢出异常。
因为clang可以为上面的测试用例生成AST,所以我假设在编译过程中可能会出现异常。现在的问题是,我不能继续访问AST节点来获取这些文件,因为我不关心输入源文件的语义。我只对静态分析感兴趣。
这是预期的行为吗?然后,如何遍历生成的AST并访问节点。我真的被困在这个时刻,不知道该如何进行。你能帮我解决这个问题吗。
提前感谢!
谢谢你,哈曼特·巴格特
发布于 2017-02-28 18:00:42
我找到了答案。系统递归深度存在问题。在Windows默认情况下,递归深度限制为512。因此,在所提到的测试用例中,堆栈甚至在达到递归极限之前就会被溢出。因此,将递归深度限制降至27,避免了堆栈溢出异常。
模板深度的情况也是如此。
https://stackoverflow.com/questions/42479448
复制相似问题