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

Иванов Игорь via cfe-dev cfe-dev at lists.llvm.org
Fri May 11 03:17:20 PDT 2018


Sure!

https://github.com/Artalus/odrey/blob/feature/ast-equal/odrey/odr_decl_traverser.h Here is traversing boilerplate and saving pointers to OdrMap container passed from outside
https://github.com/Artalus/odrey/blob/feature/ast-equal/odrey/odr_decl_traverser.cpp

https://github.com/Artalus/odrey/blob/feature/ast-equal/odrey/odr_tool.cpp#L23 Here I initiate the traversing. ClangTool, OdrMap and OdrActionFactory are members of the class, so they stay alive when at L43 I begin comparing saved pointers. How can I ensure that ASTContext stays alive too (and who actually owns it)?


Naming is rather unintuitive currently and stuff is overengineered, but I am working on it ^^"

Best regards,
Igor Ivanov

11.05.2018, 11:52, "Aleksei Sidorin" <a.sidorin at samsung.com>:
> Hello Igor,
>
> There is too few information to say definitely what happens in your
> case. Could you share the code?
> My wild guess is that you are trying to check the whole result after
> ASTContext storing all Stmts dies causing use-after-free.
>
> 11.05.2018 10:55, Иванов Игорь via cfe-dev пишет:
>>  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
>>
>>  _______________________________________________
>>  cfe-dev mailing list
>>  cfe-dev at lists.llvm.org
>>  http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
> --
> Best regards,
> Aleksei Sidorin,
> SRR, Samsung Electronics



More information about the cfe-dev mailing list