[cfe-dev] Visiting Implicit Code [RecursiveASTVisitor]
Alexandros Tzannes
atzannes at illinois.edu
Thu May 30 21:35:26 PDT 2013
Ok I (mis)filed a bug on this :) Thanks for refiling it.
Now, if I were to try and fix this bug, where would I start? More
specifically, is getTypeSourceInfo() supposed to return null for
implicit function declarations? Probably not, right?
On 05/29/2013 07:20 PM, Jordan Rose wrote:
> 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