https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82914

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Paul Eggert from comment #1)
> (In reply to Paul Eggert from comment #0)
> 
> Sorry, but my example in comment #0 (although it illustrates a bug) doesn't
> illustrate the bug that crashed GCC. Here's a better example:
> 
>   struct t { long mem; };
>   __attribute__ ((aligned (2))) struct t a;
>   struct __attribute__ ((aligned (2))) t b;
>   struct t __attribute__ ((aligned (2))) c;
>   struct t d __attribute__ ((aligned (2)));
> 
> This compiles into:
> 
>       .comm   a,8,2
>       .comm   b,8,8
>       .comm   c,8,2
>       .comm   d,8,2
> 
> Here, only 'b' is aligned correctly. The variables a, c, and d have an
> alignment of only 2, but they should have an alignment of 8 because
> __attribute__ ((aligned (8))) is documented to never decrease the alignment
> of a structure, only to increase it. The GCC 7.2 documentation
> <https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Common-Variable-Attributes.
> html> says, "When used on a struct, or struct member, the 'aligned'
> attribute can only increase the alignment; in order to decrease it, the
> 'packed' attribute must be specified as well."

I think this applies to types but not to variables.  IIRC there's no packed
attribute for variables:

int a __attribute__((aligned(2),packed));
> gcc-7 -S t.c
t.c:1:1: warning: ‘packed’ attribute ignored [-Wattributes]
 int a __attribute__((aligned(2),packed));
 ^~~

so yes, for type definitions you should need packed to decrease alignment
but for variable declarations aligned is taken literally.

You are not using aligned on a 'struct or struct member' but on the variable
in all but (b).

Reply via email to