[PATCH] c++/58109 - alignas() fails to compile with constant expression

Jason Merrill jason@redhat.com
Fri Jan 22 20:41:00 GMT 2016


On 01/20/2016 06:04 PM, Martin Sebor wrote:
>> Right.  The problem is this code in is_late_template_attribute:
>>
>>>       /* If the first attribute argument is an identifier, only consider
>>>          second and following arguments.  Attributes like mode, format,
>>>          cleanup and several target specific attributes aren't late
>>>          just because they have an IDENTIFIER_NODE as first
>>> argument.  */
>>>       if (arg == args && identifier_p (t))
>>>         continue;
>>
>> It shouldn't skip an initial identifier if !attribute_takes_identifier_p.
>
> That seems backwards. I expected attribute_takes_identifier_p()
> to return true for attribute aligned since the attribute does
> take one.

There are some attributes (mode, format, cleanup) that have magic 
handling of identifiers; aligned treats its argument as an expression 
whether or not that expression takes the form of an identifier.

> In any case, I changed the patch as you suggest and retested it
> on x86_64.  I saw the email about stage 3 having ended but I'm
> not sure it applies to changes that are still in progress.

I wouldn't think so; certainly not for something this simple.  The patch 
is OK.

Jason



More information about the Gcc-patches mailing list