[cfe-dev] Traverse AST and save Stmt* pointers for later use

Иванов Игорь via cfe-dev cfe-dev at lists.llvm.org
Fri May 11 00:55:46 PDT 2018


Hello everyone!

I am writing a tool that traverses ASTs of my project files, stores several  Stmt*  pointers, and then compares them as present here https://clang.llvm.org/doxygen/IdenticalExprChecker_8cpp_source.html#l00307 .

I tried inheriting from  ast_matchers::MatchFinder::MatchCallback  and overriding its  void run(const MatchResult &match)  /  inheriting  RecursiveASTVisitor  and implementing  VisitFunctionDecl  to store pointers of interest into a container. However it seems that at some point during/after traversing those pointers invalidate - e.g. if I check body->getStmtClass() during run, it correctly shows CompoundStmt , but afterwards it turns into some other clearly wrong class like If or For.

What are my options to solve this problem? I am aware that AST Matchers or Visitors might be a wrong tool in this case, so please don't hesitate to advise other means if those will suit me better.

Best regards,
Igor Ivanov




More information about the cfe-dev mailing list