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

            Bug ID: 72754
           Summary: pointer to an unnamed struct with a sole flexible
                    array member accepted
           Product: gcc
           Version: 7.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 following program defines two pointers to unnamed structs containing a
flexible array as their sole member.  The structs are invalid and are rejected
with an error in C mode but silently accepted by G++.

$ cat t.C && /build/gcc-trunk-svn/gcc/xgcc -B /build/gcc-trunk-svn/gcc -S -Wall
-Wextra -Wpedantic t.C
struct { int a[]; } *p;

struct S {
  struct { int a[]; } *q;
};

t.C:1:22: warning: ā€˜p’ defined but not used [-Wunused-variable]
 struct { int a[]; } *p;
                      ^

Clang produces the following output:

t.C:1:14: warning: flexible array member 'a' in otherwise empty struct is a GNU
      extension [-Wgnu-empty-struct]
struct { int a[]; } *p;
             ^
t.C:1:14: warning: flexible array members are a C99 feature [-Wc99-extensions]
t.C:4:16: warning: flexible array member 'a' in otherwise empty struct is a GNU
      extension [-Wgnu-empty-struct]
  struct { int a[]; } *q;
               ^
t.C:4:16: warning: flexible array members are a C99 feature [-Wc99-extensions]
t.C:1:22: warning: unused variable 'p' [-Wunused-variable]
struct { int a[]; } *p;
                     ^
5 warnings generated.

Reply via email to