| /* RUN: %clang_cc1 -std=c89 -verify=expected,c89only -pedantic -Wno-c11-extensions %s |
| RUN: %clang_cc1 -std=c99 -verify=expected -pedantic -Wno-c11-extensions %s |
| RUN: %clang_cc1 -std=c11 -verify=expected -pedantic %s |
| RUN: %clang_cc1 -std=c17 -verify=expected -pedantic %s |
| RUN: %clang_cc1 -std=c2x -verify=expected -pedantic %s |
| */ |
| |
| /* WG14 DR502: |
| * Flexible array member in an anonymous struct |
| */ |
| void dr502(void) { |
| /* This is EXAMPLE 3 from 6.7.2.1 and is intended to show that a flexible |
| * array member can be used when the only other members of the class are from |
| * an anonymous structure member. |
| */ |
| struct s { |
| struct { int i; }; |
| int a[]; /* c89only-warning {{flexible array members are a C99 feature}} */ |
| }; |
| |
| /* This is a slightly modified example that looks to see whether the |
| * anonymous structure itself can provide a flexible array member for the |
| * containing class. |
| * |
| * The committee does not think this is valid because it would mean the |
| * anonymous structure would have size 0. Additionally, the anonymous |
| * structure has no additional members and so the flexible array member is |
| * not valid within the anonymous structure. |
| */ |
| struct t { |
| int i; |
| struct { int a[]; }; /* expected-error {{flexible array member 'a' not allowed in otherwise empty struct}} |
| c89only-warning {{flexible array members are a C99 feature}} |
| expected-warning {{'' may not be nested in a struct due to flexible array member}} |
| */ |
| }; |
| } |
| |