[doc PATCH] document when GCC ignores attribute aligned

Martin Sebor msebor@gmail.com
Tue Dec 4 18:42:00 GMT 2018

On 12/4/18 12:20 AM, Sandra Loosemore wrote:
> On 12/3/18 8:23 PM, Martin Sebor wrote:
>> Last week we agreed to clarify that attribute aligned on a function
>> can decrease its alignment if it hasn't been previously declared
>> with one.  Attached is this change.
>> Besides the above, I also mention that the attribute specifies
>> the alignment of the first instruction of the function (in case
>> that wasn't obvious) , and that it has no effect in the absence
>> of a definition.
>> I wrote some tests to convince myself this actually works as
>> I expected.  Where it does I add those tests to the testsuite
>> via this patch.  Where it doesn't I opened a bug (PR 88345).
>> Martin
>> Index: gcc/doc/extend.texi
>> ===================================================================
>> --- gcc/doc/extend.texi    (revision 266766)
>> +++ gcc/doc/extend.texi    (working copy)
>> @@ -2386,16 +2386,20 @@ and may not be available on all targets.
>>  @itemx aligned (@var{alignment})
>>  @cindex @code{aligned} function attribute
>>  The @code{aligned} attribute specifies a minimum alignment for
>> -the function, measured in bytes.  When specified, @var{alignment} must
>> -be an integer constant power of 2.  Specifying no @var{alignment} 
>> argument
>> -implies the maximum alignment for the target, which is often, but by no
>> -means always, 8 or 16 bytes.
>> +the first instruction of the function, measured in bytes.  When 
>> specified,
>> +@var{alignment} must be an integer constant power of 2.  Specifying no
>> +@var{alignment} argument implies the ideal alignment for the target,
>> +which is often, but by no means always, 8 or 16 bytes.  The attribute
> I think you might as well delete the end of the sentence starting with 
> "which is often...".  It adds words but no useful information.  (Maybe 
> it's 8 bytes, maybe it's 16 bytes, maybe it's something else....)

I added those words in r265498.  I was hoping to give people
an idea of roughly what they might expect because I couldn't
think of a good way to find out.  But since then I realized
that the __alignof__ operator can be used to query this
alignment and I agree that the sentence isn't helpful anymore
(maybe it never really was).  I've replaced it with a reference
to __alignof__ instead and checked in r266792.


>> +has no effect when a definition for the function is not provided in
>> +the same translation unit.
>> -You cannot use this attribute to decrease the alignment of a function,
>> -only to increase it.  However, when you explicitly specify a function
>> -alignment this overrides the effect of the
>> -@option{-falign-functions} (@pxref{Optimize Options}) option for this
>> -function.
>> +The attribute cannot be used to decrease the alignment of a function
>> +previously declared with a more restrictive alignment; only to increase
>> +it.  Attempts to do otherwise are diagnosed.  Some targets specify
>> +a minimum default alignment for functions that is greater than 1.  On
>> +such targets, specifying a less restrictive alignment is silently 
>> ignored.
>> +Using the attribute overrides the effect of the 
>> @option{-falign-functions}
>> +(@pxref{Optimize Options}) option for this function.
>>  Note that the effectiveness of @code{aligned} attributes may be
>>  limited by inherent limitations in the system linker 
> This patch is OK with the above nit fixed.
> -Sandra

More information about the Gcc-patches mailing list