On Mon, Jan 14, 2013 at 11:40 AM, Michael Han <span dir="ltr"><<a href="mailto:fragmentshaders@gmail.com" target="_blank">fragmentshaders@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Richard,<br><br>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.). <br>

<br>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?<br>
</blockquote><div><br></div><div>You would need to teach TableGen to emit a function which maps the attribute syntax, scope, and name to a spelling index (and to use the spelling index when printing the attribute). You can then use that to add a method to AttributeList to get the spelling index for an attribute.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Cheers<span class="HOEnZb"><font color="#888888"><br>Michael</font></span><div class="HOEnZb"><div class="h5">
<br><br><div class="gmail_quote">On Fri, Jan 11, 2013 at 5:14 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br><br><div class="gmail_quote"><div>On Fri, Jan 11, 2013 at 3:53 PM, Michael Han <span dir="ltr"><<a href="mailto:fragmentshaders@gmail.com" target="_blank">fragmentshaders@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br><br>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.</blockquote>


<div><br></div></div><div>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(...).</div>


<div><br></div><div>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?</div></div>


</blockquote></div><br>
</div></div></blockquote></div><br>