[cfe-dev] Determining macros used in a function or SourceRange (using clang plugin)

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Wed Sep 28 18:17:49 PDT 2016


On Wed, Sep 28, 2016 at 11:59 AM, Eric Bayer <ebayer at vmware.com> wrote:

> Thanks Richard,
>
> Question/comment inline.
>
> On 9/28/2016 11:50 AM, Richard Smith wrote:
>
> On Wed, Sep 28, 2016 at 11:29 AM, Eric Bayer via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> Oh, one follow on question... If I persist a MacroDefinition* or
>> MacroInfo* in a datastructure, will this still exist when processing the
>> AST tree or will these have been deleted out from under me?  Just trying to
>> understand how much info I need to copy in a few cases.
>
>
> MacroInfo, MacroDirective and ModuleMacro objects should persist until the
> Preprocessor object is destroyed. You can hold onto them until that happens.
>
>
> That had been my guess, unfortunately as I'm a plugin I am not creating
> that myself.  I guess my real question is then, at what stage is the
> default preprocessor object destroyed in the compiler.
>

I believe the preprocessor should still be around for all callbacks your
plugin receives (except perhaps in destructors).

MacroDefinition has value semantics, so if you want to persist a
> MacroDefinition* it's up to you to store the MacroDefinition object
> somewhere. But you should probably just be passing it around by value.
>
>
> Ohhh, gotcha!  Thanks for the tip.
>
>
>
>>
>>    -Eric
>>
>> On 9/27/2016 6:59 PM, Eric Bayer wrote:
>>
>>> Hi Alex,
>>>
>>> Thanks again for all your help.  Actually I did manage to make this
>>> eventually work with a huge amount of Lexer/Token magic. Unfortunately I
>>> could not actually follow it past 1 level, so it looks like an unworkable
>>> solution for what I have in mind. I had thought the macro definitons were
>>> expanded from other macros. After digging though the SLocEntries, this is
>>> clearly not the case and they are expanded at their final uses.  This means
>>> I'm going back to the PPCallbacks and digging in there.  I think I can get
>>> the whole tree without annotating every macro I meet. Apparently
>>> MacroExpands gets called repeatedly at the point the macro gets used.
>>>
>>> Kind Regards,
>>>    -Eric
>>>
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Ddev&d=CwMFaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=JUV4JPCePpFuWnRnH3TEko8ht33mtVYPAwDFFDOf8Jo&m=HHAYm6YF9BGgbzq3dgtAQ1syCDBHK4qIgwM7qGmi7h8&s=N9jDWZHCSPLEGmNFEfGk2XtEP9LRO-gGhCESFwWJmZ8&e=>
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160928/b92313e9/attachment.html>


More information about the cfe-dev mailing list