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 <[email protected]>wrote: > Hi, > > On Fri, Jan 11, 2013 at 3:53 PM, Michael Han <[email protected]>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? >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
