Clang 是否可能';不改变标题?

Clang 是否可能';不改变标题?,clang,llvm,llvm-clang,libtooling,Clang,Llvm,Llvm Clang,Libtooling,我有一个LibTooling(timelag),用于为每个forstmt/whilestmt添加一个标志。我使用/timelag lalalala.cpp--在lalala.cpp中插入标志 不幸的是,此工具还将更改标头,甚至更改系统库 那么,是否有一些方法可以让LibTooling只处理输入文件?这里有两种可能性:如果使用RecursiveASTVisitor,可以使用SourceManager确定语句或声明的位置是否在主扩展文件中: clang::SourceManager &sm(

我有一个LibTooling(timelag),用于为每个forstmt/whilestmt添加一个标志。我使用
/timelag lalalala.cpp--
在lalala.cpp中插入标志

不幸的是,此工具还将更改标头,甚至更改系统库


那么,是否有一些方法可以让LibTooling只处理输入文件?

这里有两种可能性:如果使用RecursiveASTVisitor,可以使用SourceManager确定语句或声明的位置是否在主扩展文件中:

clang::SourceManager &sm(astContext->getSourceManager());
bool const inMainFile(
  sm.isInMainFile( sm.getExpansionLoc( stmt->getLocStart())));
if(inMainFile){
  /* process decl or stmt */
}
else{
  std::cout << "'" << stmt->getNameAsString() << "' is not in main file\n";
}  

还有一个类似的匹配器,
isexpansionsystemheader

非常感谢您的支持。事实上,我正在使用文件路径来识别系统头,这看起来太愚蠢了。我将使用isInSystemHeader来改进我的代码。再次感谢你。
auto matcher = forStmt( isExpansionInMainFile());