[cfe-dev] address_space pragma

John McCall via cfe-dev cfe-dev at lists.llvm.org
Thu Aug 2 20:53:23 PDT 2018


> On Aug 2, 2018, at 7:49 PM, Leonard Chan <leonardchan at google.com> wrote:
> As I have it now, I store a map of source locations to macro
> definition names as they are being parsed and that's where I attempt
> to find the attribute. Since the printing of the address_space is
> controlled by the qualifier, I added an extra field to the qualifier
> instead for storing the macro name. I can get this name during the
> address space attribute construction where the source location of
> address_space is available to me.
> 
> Would you mind if I added you as a reviewer to this patch after I clean it up?

Most of this preprocessor stuff is really beyond me; I'm probably not the best
reviewer.  Richard might have a better suggestion.

I *think* the macro name can be recovered from the existing recorded
information in the AST; it's just not really obvious.  (Adding a method for this
would be great!)  Again, I'm not an expert, but I think the idea is:
  - You need to find the right level of macro expansion, keeping in mind that the
    reference to the attribute macro might itself be written in a macro.
  - You need to get the ExpansionInfo for that expansion.
  - You need to verify that it's a macro body expansion and that it's not a function
    macro expansion.
  - At that point, getExpansionLocStart() should be the location of the token for the
    macro, and you can just ask the preprocessor for the spelling of that token.

John.


> On Thu, Aug 2, 2018 at 3:38 PM John McCall <rjmccall at apple.com> wrote:
>> 
>>> On Aug 2, 2018, at 5:41 PM, Leonard Chan <leonardchan at google.com> wrote:
>>> 
>>> On Thu, Aug 2, 2018 at 2:33 PM John McCall <rjmccall at apple.com> wrote:
>>>> 
>>>>> On Aug 2, 2018, at 5:28 PM, Leonard Chan <leonardchan at google.com> wrote:
>>>>> 
>>>>> Ok. So we will no longer use the pragma. We will instead opt for your
>>>>> suggestion of printing the macro. So the new goals are now:
>>>>> 
>>>>> - Having address_space() accept strings in addition to integers to
>>>>> represent unique address spaces
>>>> 
>>>> Is this still important if you get the diagnostic improvement?  If you were declaring address
>>>> spaces somehow, this seems fine, but I don't really want to make address_space("whatever")
>>>> implicitly declare an address space with specific semantics when it's not hard to imagine
>>>> wanting that for other purposes in the future.
>>> 
>>> Not entirely. This was something that's still remnant of when we were
>>> using pragma. It's something that would be nice for us now, but could
>>> also be discussed later down the line.
>>> 
>>>>> - Changing the type printer to print the macro instead of the whole
>>>>> attribute if the attribute was passed a string instead of an int.
>>>> 
>>>> I don't know that the latter needs to be restricted; it seems like a nice usability improvement
>>>> for all address-space users.
>>> 
>>> Ok, so in general if address_space is used in a macro, then print the macro.
>> 
>> Yeah.  You'll need to record this spelling information in the AttributedType, since
>> the Type won't otherwise have a source location attached.
>> 
>> I'm not sure we actually make an AttributedType for address_space, but doing
>> so is reasonable.
>> 
>> We should do a quick parse of the macro's token sequence to verify that it's just
>> an attribute.  Unfortunately, I'm not really sure how to do that.
>> 
>> John.




More information about the cfe-dev mailing list