[cfe-dev] RecursiveASTVisitor Behavior
Michael Chiu via cfe-dev
cfe-dev at lists.llvm.org
Thu Mar 18 09:02:21 PDT 2021
Hi David,
Thanks for the prompt reply. I should’ve been more clear but I am returning
bool in all of the visitor method functions, but clang::VarDecl is still
not visited which is why I’m so perplexed.
On Thu, Mar 18, 2021 at 8:58 AM David Rector <davrecthreads at gmail.com>
wrote:
>
>
> On Mar 18, 2021, at 11:42 AM, Michael Chiu via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
> Hi All,
>
> I have c code, below, that I'm trying to visit the AST of by using
> RecursiveASTVisitor. I'm trying to get the RecursiveASTVisitor to visit
> variable declarations (clang::VarDecl) by implementing bool
> VistVarDecl(clang::VarDecl *vardecl). However, the clang::VarDecl nodes
> are never visited even though I've managed to visit all the other nodes in
> the AST though. Moreover, using clang-query on test1.c I *can* match
> varDecl.
>
> Does anyone know the clang::VarDecl nodes are the only nodes that aren't
> visited by the RecursiveASTVisitor but are matched by clang-query?
>
> Thanks in advaince!
>
> ```
> double multiply(double x, double y) {
>
> return x * y * y;
> }
> int main(int argc, char const *argv[]){
> double a;
>
> int b;
>
> float d;
>
> double x = 3.0;
> double y = 5.0;
>
> double z = multiply(x,y);
>
> return 0;
> }
> ```
>
> My RecursiveASTVisitor is as follows:
> ```
> struct MyASTVisitor : public clang::RecursiveASTVistor<MyASTVisitor> {
>
> bool VistVarDecl(clang::VarDecl *vardecl) {
> llvm::outs() << "Found a VarDecl";
>
> Add `return true;’ here and in the others. (Traversal halts after the
> first false return, and all these are returning false by default.)
>
> };
>
> bool VisitFunctionDecl(clang::FunctionDecl *decl) {
> llvm::outs() << "Found a FunctionDecl";
> };
>
> // other functions implemented similarly just to see if it visits properly
> bool VisitParmVarmDecl(clang::ParmVarDecl *paramvardecl);
> bool VisitCallExpr(clang::CallExpr *callexpr);
> bool VisitImplicitCastExpr(clang::ImplicitCastExpr *castexpr);
> bool VisitBinaryOperator(clang::BinaryOperator *bo);
> bool VisitDeclStmt(clang::DeclStmt *declstmt);
> bool VisitDeclRefExpr(clang::DeclRefExpr *declrefexpr);
> bool VisitFloatingLiteral(clang::FloatingLiteral *floatliteral);
> };
> struct MyASTConsumer : public clang::ASTConsumer {
>
> bool HandleTopLevelDecl(clang::DeclGroupRef DR) override {
> for (clang::DeclGroupRef::iterator b = DR.begin(), e = DR.end(); b != e; ++b) {
> Visitor.TraverseDecl(*b);
> }
> return true;
> }private:
> MyASTVisitor Visitor;
> };
> ```
>
>
> --
> Michael.
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
> --
M.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20210318/a8f86be6/attachment-0001.html>
More information about the cfe-dev
mailing list