[cfe-dev] Visiting Implicit Code [RecursiveASTVisitor]

Manuel Klimek klimek at google.com
Mon Jun 10 05:41:35 PDT 2013


The easiest way to get an answer is probably to hang out on #llvm on oftc
and try to get a hold of zygoloid or dgregor.


On Wed, Jun 5, 2013 at 7:54 PM, Alexandros Tzannes <atzannes at illinois.edu>wrote:

> Hi all,
> I am interesting in fixing this bug, unless someone is already working on
> it, but I may need some help as I am not familiar with the parser side of
> the Frontend in clang. Does anyone have any suggestions or advice on my
> question below?
>
> Thanks in advance
> Alex
>
>
> On 05/30/2013 11:35 PM, Alexandros Tzannes wrote:
>
>> 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 shouldVisitTemplateInstantiati**ons() 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<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>>>>
>>>
>> ______________________________**_________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>>
>
> --
> "Under the Illinois Freedom of Information Act (FOIA), any written
> communication to or from University employees regarding University
> business is a public record and may be subject to public disclosure."
>
>
> ______________________________**_________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130610/35808cb3/attachment.html>


More information about the cfe-dev mailing list