Hi, my problem is that in some cases ASTContext::getParents() returns an empty list, reproducible with release_38 and 39, so I think it's not a bug and I missed an important point.
a) To understand the problem: In which cases does getParents() return an empty list and in which is doesn't? b) Is there an easier way to get just the parent of an ASTNode? I am working on a clang tool which (should) insert strings to convert implicit casts to explicit casts withins C++ Code. Internally I need to get the parent AST Node (decl or stmt) of each implicit cast Node (I'm using an ResursiveASTVisior approach) to determ if the cast was already handled correctly. Any help is welcome. Cheers, Klaus In my small testcase it surprisingly depends on whether or not an implicit cast is part of an include file (uncomment b=7.0 to see the effect). All other transformation to test.cpp are working fine. //BEGIN test.cpp: #include "test.hpp" void test() { double dblx=17.3; int implicitcast1=dblx/2; int cstylecast=(int)dblx/2; } //END test.cpp //BEGIN test.hpp: void foo() { int a=7; // int b=7.0; // if this line here is not commented out, it fails:( } //END test.hpp My code looks like: bool VisitStmt(Stmt *stmt) { if(ImplicitCastExpr* impcast = dyn_cast<ImplicitCastExpr>(stmt)) { CastKind kind = impcast->getCastKind(); if(kind==CK_FloatingToIntegral) { llvm::outs() << "CK_FloatingToIntegral found \n"; //dump_location(stmt->getLocStart()); //impcast->dump(); auto parents = Context->getParents(*stmt); if ( !parents.empty() ) { const Decl* decl = parents[0].get<Decl>(); if(decl) instrument_Implicit_cast(impcast); else { const Stmt *ST = parents[0].get<Stmt>(); if(const CStyleCastExpr* ccast = dyn_cast<CStyleCastExpr>(ST)) { llvm::outs() << "CStyle cast found\n"; } else if(const CXXStaticCastExpr* cppcast = dyn_cast<CXXStaticCastExpr>(ST)) { llvm::outs() << "static_cast found\n"; } else { instrument_Implicit_cast(impcast); } } } else { llvm::outs() << "parents empty:(\n"; } } else { //llvm::outs() << "ignored\n"; } } return true; } _______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users