diff mbox

[RFC] Canonize names of attributes.

Message ID 01b338b6-226d-d9c9-aea0-e54aac1f7edd@suse.cz
State New
Headers show

Commit Message

Martin Liška June 28, 2017, 2:45 p.m. UTC
On 06/14/2017 06:40 PM, Joseph Myers wrote:
> On Wed, 14 Jun 2017, Richard Biener wrote:
> 
>>>> are you sure this is needed?  This seems to be solely arguments to
>>>> attributes.
>>>
>>> It's need for cases like:
>>>  __intN_t (8, __QI__);
>>
>> But __QI__ is not processed in lookup_attribute, is it?  So canonizing that
>> looks unrelated?  I didn't see similar handling in the C FE btw (but
>> maybe I missed it).
> 
> It's not clear to me that there is automatically a rule that where 
> identifiers are arguments to attributes, they must follow this rule about 
> foo and __foo__ being equivalent.
> 
> Specifically: c-attribs.c:attribute_takes_identifier_p says that the 
> cleanup attribute takes an identifier (a function name).  But it's 
> certainly the case that the exact function named there must be used; foo 
> and __foo__ as cleanup attribute arguments are not equivalent.  (You could 
> argue cleanup should take an expression, with an error then being given if 
> that doesn't evaluate to a function designator.)
> 

Hello.

This is obvious reason where original name must be preserved. Looks following patch
works and does not break test-suite:
diff mbox

Patch

diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 8f638785e0e..08b4db5e5bd 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -24765,7 +24765,8 @@  cp_parser_gnu_attribute_list (cp_parser* parser)
 		  tree tv;
 		  if (arguments != NULL_TREE
 		      && ((tv = TREE_VALUE (arguments)) != NULL_TREE)
-		      && TREE_CODE (tv) == IDENTIFIER_NODE)
+		      && TREE_CODE (tv) == IDENTIFIER_NODE
+		      && !id_equal (TREE_PURPOSE (attribute), "cleanup"))
 		    TREE_VALUE (arguments) = canonize_attr_name (tv);
 		  release_tree_vector (vec);
 		}