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

            Bug ID: 81756
           Summary: type attributes silently ignored on type declarations
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

When the C11 _Alignas specifier is used on a struct declaration GCC issues a
helpful warning pointing out that the attribute is meaningless.  The warning is
issued unconditionally with no option to control it.  This should be corrected
and the warning should be enabled under a designated option (e.g., -Wattributes
or -Wignored-attributes).

However, when the equivalent attribute aligned is used the same way GCC
silently ignores it.  It would help prevent subtle bugs to have GCC issue a
warning in this case to let the user know that the attribute has no effect.

The test case below illustrates the problem.

$ cat b.c && gcc -O2 -S -Wall -Wextra b.c
#define A(e) _Static_assert ((e), #e)

_Alignas (32) struct NotAligned;   // ignored with warning  (good)

struct NotAligned { long i; };

A (_Alignof (struct NotAligned) == _Alignof (long));   // passes


struct __attribute__ ((aligned (32)))   // silently ignored
Aligned32;

struct Aligned32 { long i; };

A (_Alignof (struct Aligned32) == 32);   // FAILS
b.c:3:22: warning: useless ‘_Alignas’ in empty declaration
 _Alignas (32) struct NotAligned;   // ignored with warning  (good)
                      ^~~~~~~~~~
b.c:1:14: error: static assertion failed: "_Alignof (struct Aligned32) == 32"
 #define A(e) _Static_assert ((e), #e)
              ^~~~~~~~~~~~~~
b.c:15:1: note: in expansion of macro ‘A’
 A (_Alignof (struct Aligned32) == 32);   // FAILS
 ^

Reply via email to