运行 某些输入文件上的自定义 clang 前端工具期间出现异常
Exception during running custom clang Frontend tool on some input files
我根据以下link写了一个自定义的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 在此测试中抛出 Whosebug 异常,甚至在控件进入 HandleTranslationUnit.
之前
由于clang可以为上述测试用例生成AST,我认为异常可能是在编译过程中出现的。现在的问题是我不能继续访问此类文件的 AST 节点,因为我不关心输入源文件的语义。我只对静态分析感兴趣
这是预期的行为吗?那么如何遍历生成的AST,访问节点。我真的被困在这一刻,不知道如何继续。
你能帮我解决这个问题吗?
提前致谢!
谢谢,
赫曼特·巴加特
我找到了答案。系统递归深度有问题。在 Windows 默认递归深度限制是 512。所以在提到的测试用例中,堆栈甚至在达到递归限制之前就溢出了。因此将递归深度限制减少到 27 避免了堆栈溢出异常。
模板深度的情况类似。
我根据以下link写了一个自定义的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 在此测试中抛出 Whosebug 异常,甚至在控件进入 HandleTranslationUnit.
之前由于clang可以为上述测试用例生成AST,我认为异常可能是在编译过程中出现的。现在的问题是我不能继续访问此类文件的 AST 节点,因为我不关心输入源文件的语义。我只对静态分析感兴趣
这是预期的行为吗?那么如何遍历生成的AST,访问节点。我真的被困在这一刻,不知道如何继续。 你能帮我解决这个问题吗?
提前致谢!
谢谢, 赫曼特·巴加特
我找到了答案。系统递归深度有问题。在 Windows 默认递归深度限制是 512。所以在提到的测试用例中,堆栈甚至在达到递归限制之前就溢出了。因此将递归深度限制减少到 27 避免了堆栈溢出异常。
模板深度的情况类似。