<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Dec 12, 2014 at 2:39 AM, Manasij Mukherjee <span dir="ltr"><<a href="mailto:manasij7479@gmail.com" target="_blank">manasij7479@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
Here is my code, sorry for the delay.<br>
<br>
class FunctionBodyVisitor : public clang::StmtVisitor<FunctionBodyVisitor> {<br>
public:<br>
  void VisitCallExpr(clang::CallExpr* Expr) {<br>
    llvm::outs() << Expr->getCalleeDecl()->getAsFunction()->getName() << "\n";<br>
    //this is never called<br>
  }<br>
};<br>
<br>
class DummyVisitor : public clang::RecursiveASTVisitor<DummyVisitor> {<br>
public:<br>
  bool VisitFunctionDecl(clang::FunctionDecl* Decl) {<br>
    llvm::outs() << Decl->getName() << "\n"; // this part visibly works<br>
    stmtVisitor.Visit(Decl->getBody());<br>
    return true;<br>
  }<br>
private:<br>
  FunctionBodyVisitor stmtVisitor;<br>
};<br>
<br>
The code on which this is called is:<br>
void foo()<br>
{<br>
<br>
}<br>
int main()<br>
{<br>
    foo(); // I want to get to this call expression<br>
}</blockquote><div><br></div><div>Note that StmtVisitor is not recursive; the statement you're visiting is a CompoundStmt, not a CallExpr. A RecursiveASTVisitor that just implements VisitCallExpr may do what you want here.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888"><br>
Manasij<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Sat, Dec 6, 2014 at 8:18 AM, Gabor Kozar <<a href="mailto:kozargabor@gmail.com">kozargabor@gmail.com</a>> wrote:<br>
> Hi,<br>
><br>
> It should work. Define an StmtVisitor subclass, provide a VisitCallExpr.<br>
> Then in your Visitor::VisitFunctionDecl, construct an StmtVisitor object,<br>
> then call its Visit method with the function's body.<br>
><br>
> In the future, please also provide source code, to allow us to spot any bugs<br>
> and problems in your code (e.g. you may believe that the code does what you<br>
> say it does, but you might have a bug, etc.).<br>
><br>
> ---<br>
> Best regards,<br>
><br>
> Gábor 'ShdNx' Kozár<br>
> <a href="http://gaborkozar.me" target="_blank">http://gaborkozar.me</a><br>
><br>
><br>
><br>
> On Wed, Dec 3, 2014, at 07:11, Manasij Mukherjee wrote:<br>
><br>
> Hi,<br>
> In a RecursiveASTVisitor implementation, I implement VisitFunctionDecl.<br>
> Now, from the FunctionDecl I have, I can call getBody and get a Stmt.<br>
><br>
> How can I visit all the functions this function calls ?<br>
> I have tried creating a StmtVisitor and ..err..defining VisitCallExpr !<br>
> That didn't work.<br>
><br>
> Can anyone point me to what I should be doing ?<br>
><br>
> Manasij Mukherjee<br>
> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
><br>
><br>
> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div></div>