[cfe-commits] [PATCH] Improved __declspec support

Michael Spencer bigcheesegs at gmail.com
Mon Jun 18 17:00:06 PDT 2012


On Mon, Jun 18, 2012 at 4:43 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
> On Mon, Jun 18, 2012 at 6:17 PM, Richard Smith <richard at metafoo.co.uk> wrote:
>>> +  /// Returns true if the attribute is a pure __declspec or a synthesized
>>> +  /// declspec representing a type specification (like __w64 or __ptr32).
>>> +  bool isDeclspecAttribute() const { return SyntaxUsed == AS_Declspec ||
>>> +                                            SyntaxUsed == AS_MSTypespec; }
>>
>> Given that these attributes aren't spelled as __declspec, I'd prefer
>> that we return false for MSTypespec attributes here (and change the
>> comment on AS_MSTypespec above to match). I think this makes things
>> simpler, and doesn't seem to matter for the rest of the patch (you
>> remove the one existing use of this function, and none of your added
>> calls need this behavior).
>
> This one kind of bugged me too, but the reason I did it was for
> historical purposes.  Those have always been considered __declspec
> previously, so this patch was retaining compatibility with the
> previous behavior.
>
> I think I would prefer to make that change as a separate patch just to
> keep the distinction more clear.  I do agree that it would be better
> for those type specifiers to not be spelled as declspecs, but I have
> no idea the scope of that sort of change.

Note that __forceinline is currently represented as a GNU attribute,
which is obviously wrong. It would be nice for that to be fixed at the
same time, as it's a similar keyword type.

- Michael Spencer

>>> +  } else if (Ident->getName() == "property") {
>> [...]
>>> +    return true;
>>
>> How about recovering from this, with something like:
>>
>>  BalancedDelimiterTracker T(*this, tok::l_paren);
>>  if (!T.consumeOpen())
>>    T.skipToEnd();
>>  return;
>>
>> ... then remove the return value from the function. This would allow
>> us to deal with things like
>>  __declspec(property(...) some_other_attribute)
>
> My next patch (already mostly written) adds true parsing support for
> property, so that's a WIP.  But until that patch lands, this is a good
> idea.
>
> ~Aaron
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list