[cfe-dev] Visiting Implicit Code [RecursiveASTVisitor]

Jordan Rose jordan_rose at apple.com
Wed May 29 16:20:17 PDT 2013


Sounds like a mistake—there are plenty of legitimate reasons to traverse the params of an implicit function. Please file a bug at http://llvm.org/bugs/.

Jordan


On May 29, 2013, at 9:39 , Alexandros Tzannes <atzannes at illinois.edu> wrote:

> Hi,
> I'm writing a checker that needs to visit and understand implicit code (among other things).
> 
> Note: All three "should" functions of my visitor return true, though I'm not sure this matters in this specific case (keep reading).
>  bool shouldVisitTemplateInstantiations() const { return true; }
>  bool shouldVisitImplicitCode() const { return true; }
>  bool shouldWalkTypesOfTypeLocs() const { return true; }
> 
> 
> In the code below the operator= is implicit (see commented out code)
> 
> class Data {
> public:
>  int x;
>  int y;
> 
> //inline Data &operator=(const Data &D) noexcept {
> //  this->x = D.x;
> //  this->y = D.y;
> //  return *this;
> //}
> 
> };
> 
> void copy(Data in, Data out) {
>  out = in;
> }
> 
> I'm visiting the code using the RecursiveASTVisitor and my problem is that the parameter of the implicit function is not visited because getTypeSourceInfo() returns null on line 1739 of RecursiveASTVisitor.h
> 
> -- RecursiveASTVisitor.h:lines 1735-1741 ----------------------------
> 
>  // Visit the function type itself, which can be either
>  // FunctionNoProtoType or FunctionProtoType, or a typedef.  This
>  // also covers the return type and the function parameters,
>  // including exception specifications.
>  if (TypeSourceInfo *TSI = D->getTypeSourceInfo()) {
>    TRY_TO(TraverseTypeLoc(TSI->getTypeLoc()));
>  }
> 
> ---------------------------------------------------------------------
> 
> Nevertheless, dumping the AST node for the CXXMethod (operator=) reveals that a nameless parameter is properly created.
> 
> Is this behavior (of not visiting the parameters of an implicit function) by design, or a corner case that slipped through the cracks? Any advice on how to visit the parameters of implicit functions with the RecursiveASTVisitor?
> 
> Cheers!
> Alex
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev





More information about the cfe-dev mailing list