[cfe-commits] [Patch] PR14922 - Improve Attr::printPretty

Michael Han fragmentshaders at gmail.com
Mon Jan 14 11:40:41 PST 2013


Hi Richard,

I think that is a great idea but I am not sure what value to pass to Attr
when it's constructed in SemaDeclAttr.cpp. I was hoping to reuse the syntax
enumerator value as the spelling list index but it does not work for all
cases (e.g. alignment attribute in GNU syntax has two spellings.).

Alternatively, at the time we construct an Attr, there is enough
information (both the syntax and the actual spelling) we can use to print
the attribute in full fidelity. We can pass the spelling string to the
Attr, besides the syntax used as this patch did, so the printer will know
which syntax and spelling to select. It would be more elegant to encode
both information as a single index into the spelling list but I haven't
figured out how to do that. Any suggestions on this?

Cheers
Michael

On Fri, Jan 11, 2013 at 5:14 PM, Richard Smith <richard at metafoo.co.uk>wrote:

> Hi,
>
> On Fri, Jan 11, 2013 at 3:53 PM, Michael Han <fragmentshaders at gmail.com>wrote:
>
>> Hi,
>>
>> Attached patch is to fix PR14922. Currently when print an attribute the
>> GNU syntax will always be used, even if the attribute has no GNU syntax.The
>> fix is to pass the syntax flag when constructing the Attr node and take
>> that into consideration when printing the attribute. The name of actual
>> attribute gets printed is read from table gen definition file so there is
>> still some limitations, for example, when an attribute has multiple
>> spellings, the first spelling is used; and the namespace of the attribute
>> (in case it's a C++11 attribute) is not printed. I test the patch locally
>> in my project which has access to Clang AST but I am not sure how to write
>> a stand alone test to test the attribute pretty print.  After this patch
>> gets in I'll send another patch which updates the SemaDeclAttr to pass the
>> actual syntax flag from AttributeList to Attr.
>
>
> I don't think this is the best approach: it still always uses the first
> spelling, so it still won't produce the right string for
> __attribute__((aligned(...))) versus __declspec(alignment(...)) versus
> [[gnu::aligned(...)]] versus alignas(...).
>
> Since we already have a list of possible spellings for an attribute in the
> attribute definition (which incorporates the syntax used), how about just
> storing an index into that list on the Attr?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130114/9f6b449a/attachment.html>


More information about the cfe-commits mailing list