[cfe-dev] Visiting Implicit Code [RecursiveASTVisitor]
Alexandros Tzannes
atzannes at illinois.edu
Wed May 29 09:38:03 PDT 2013
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
More information about the cfe-dev
mailing list