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

            Bug ID: 88344
           Summary: sole attribute specification in a class silently
                    accepted
           Product: gcc
           Version: 9.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: ---

The C++ front-end silently accepts sole attribute specifications within a class
that don't apply to any member of the class.  The C front-end (and Clang and
ICC) issue a warning.

$ (set -x && cat t.c && gcc -S -Wall t.c && gcc -S -Wall -xc++ t.c)
+ cat t.c
struct B {
  __attribute__ ((always_inline));
};

+ gcc -S -Wall t.c
t.c:2:3: warning: empty declaration
    2 |   __attribute__ ((always_inline));
      |   ^~~~~~~~~~~~~
+ gcc -S -Wall -xc++ t.c


The real code that this came up in actually looked more like this:

  struct A
  {
    void* alloc (int); __attribute__ ((alloc_align (2)));
    // ...
  };

I.e., there was a spurious semicolon before the __attribute__ keyword.  GCC
ended up swallowing and ignoring the attribute with no warning.

Reply via email to