clang 3.8 - 如何阻止clang创建系统头文件的AST?

时间:2016-02-18 14:17:55

标签: c++ clang header-files abstract-syntax-tree

我最近开始在Fedora 22机器上使用Clang 3.8来制作一个解析clang AST并从AST节点中提取一些信息的工具。该工具应该用C,C ++和SystemC文件读取。

当我使用我的工具读取文件并转储AST时,它也会显示系统标题的AST。

因此我的问题:  如何让我的工具不显示系统标题的AST?因为我将修改文件,我担心系统头会产生开销。

PS。我已经尝试过isInSystemHeader()函数,但它没有帮助。因为解析器只是不断挖掘系统头,并在某些时候产生错误。错误是

"/llvm/tools/clang/lib/Basic/SourceLocation.cpp:117: bool clang::FullSourceLoc::isInSystemHeader() const: Assertion `isValid()' failed.

中止(核心倾销)"

指向解决方案的指针或解决方案将受到高度赞赏:) 感谢。

1 个答案:

答案 0 :(得分:1)

尝试:

FullSourceLoc fullSourceLoc(decl->getLocation(), astContext.getSourceManager());
if (fullSourceLoc.isValid() && !fullSourceLoc.isInSystemHeader()) {
     // system header excluded here
}