question about attribute aligned for functions

Martin Sebor msebor@gmail.com
Wed Nov 28 17:01:00 GMT 2018


On 11/28/18 6:04 AM, Florian Weimer wrote:
> * Martin Sebor:
> 
>> At the same time, the following passes on x86_64:
>>
>>    __attribute__ ((aligned (1))) void f1 (void) { }
>>    _Static_assert (__alignof__ (f1) == 1);   // wrong alignof result
>>
>>    __attribute__ ((aligned)) void f0 (void) { }
>>    _Static_assert (__alignof__ (f0) == 16);
>>
>>    __attribute__ ((aligned (2))) void f2 (void) { }
>>    _Static_assert (__alignof__ (f2) == 2);
> 
> Is there any value in implementing alignof on functions?
> 
> sizeof (f1) is defined to be 1, allegedly to support function pointer
> arithmetic (which is why sizeof (void) is 1 as well).  In practice, this
> is confusing to the programmer because the size of a function is at
> least known to the linker.

I also don't see any utility in applying sizeof to functions, at
least not with the existing semantics of evaluating to 1.  alignof
seems somewhat more useful, but not tremendously so, for similar
reasons (at least it gives the lower bound).  But both have been
implemented for ages so they couldn't be removed without some risk.
I don't know if the benefits of the removal would justify the risks.

Martin



More information about the Gcc mailing list