0

我根据以下链接编写了一个自定义 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 之前,它也会引发 stackoverflow 异常

由于 clang 可以为上述测试用例生成 AST,我认为异常可能在编译期间出现。现在的问题是我不能继续访问这些文件的 AST 节点,因为我不关心输入源文件的语义。我只对静态分析感兴趣。

这是预期的行为吗?那么如何遍历生成的 AST 并访问节点。我真的被困在这一刻,不知道如何继续。请你帮我解决这个问题。

提前致谢!

谢谢,赫曼特·巴加特

4

1 回答 1

0

我找到了答案。系统递归深度存在问题。在 Windows 上,默认递归深度限制为 512。因此,在上述测试用例的情况下,堆栈甚至在达到递归限制之前就已经溢出。因此将递归深度限制降低到 27 可以避免堆栈溢出异常。

模板深度的情况类似。

于 2017-02-28T18:00:42.843 回答