[PATCH 1/2] c-family: Copy DECL_USER_ALIGN even if DECL_ALIGN is similar.

Jason Merrill jason@redhat.com
Wed Jun 9 21:24:15 GMT 2021


On 6/9/21 4:47 AM, Robin Dapp wrote:
>>>> As you say, the logic is convoluted.  Let's simplify it rather than 
>>>> make
>>>> it more convoluted.  One possibility would be to change || to | toavoid
>>>> the shortcut, and then
>>>>
>>>> bool note = lastalign > curalign;
>>>> if (note)
>>>>      curalign = lastalign;
>>>
>>> I went with your suggestion in the attached v2.  Regtested and
>>> bootstrapped on s390x, x86 and ppc64le.
>>
>> OK.
> 
> urg, I did not commit yet because I fiddled around with my tests again. 
> Using dg-notes checks (and thus being "forced" to handle all cases 
> individually) I realized that the above is not enough as
> it reintroduces the same problem that I was originally trying to avoid:
> 
> We want to warn if lastalign == curalign but DECL_USER_ALIGN (last_decl) 
> != DECL_USER_ALIGN (decl), i.e. when the user explicitly specified 
> __attribute__ ((aligned (8))) on s390 (see example in my first mail).
> 
> What about checking
> 
> lastalign > curalign || (lastalign == curalign && DECL_USER_ALIGN 
> (last_decl) != DECL_USER_ALIGN (decl))
> 
> instead and changing the associated comment?

I might use > instead of !=, but sure.

> Even then it's not really satisfactory to emit a note that complains
> about "aligned (8)" at a declaration where it was not even explicitly
> specified.  But then, the situation is similar for other attributes as 
> well and we would need to explicitly store the location where an 
> attribute was specified first.



More information about the Gcc-patches mailing list