Hi all, I stumbled over this as I found the wording in the release notes rather unclear.is.
First, the following gives only a -pedantic warning and not a -Wflex-array-member-not-at-end: struct t { int b; int x[]; }; struct q { int b; struct t a[2]; int c; }; warning: invalid use of structure with flexible array member [-Wpedantic] If I remove the "[2]", it shows additionally: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] It seems as if it should print latter warning also inside the struct. Qing? Joseph? Thoughts? * * * Secondly, if this is deprecated, shouldn't then the warning enabled by, e.g., -Wall or made otherwise more prominent? (-std=?) - Currently, one either has to find the new flag or use -pedantic. Or is this not really regarded as deprecated? But then (IMHO) we should not really claim so and just add the warning without deprecation. BTW; clang-15 prints the -Wgnu-variable-sized-type-not-at-end warning by default. Joseph, all: Thoughts? * * * Cross ref: The patch adding the new warning is r14-2197-g070a6bf0bdc6761 https://gcc.gnu.org/pipermail/gcc-cvs/2023-June/385730.html (cf. previously in this thread) * * * Regarding the changes.html wording: On 07.08.23 16:22, Qing Zhao via Gcc-patches wrote:
Comparing to the 1st version, the only change is to address Richard's comment on refering a warning option for diagnosing deprecated behavior.
...
+++ b/htdocs/gcc-14/changes.html @@ -30,7 +30,18 @@ a work-in-progress.</p> <!-- .................................................................. --> <h2>Caveats</h2> <ul> - <li>...</li> + <li><strong>C:</strong> + Support for the GCC extension, a structure containing a C99 flexible array + member, or a union containing such a structure, is not the last field of + another structure, is deprecated. Refer to + <a href="https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html"> + Zero Length Arrays</a>.
... I find the first sentence difficult to read. What do you think of the following? (It is hard to come up with some good wording.) --- a/htdocs/gcc-14/changes.html +++ b/htdocs/gcc-14/changes.html @@ -31,9 +31,10 @@ a work-in-progress.</p> <h2>Caveats</h2> <ul> <li><strong>C:</strong> - Support for the GCC extension, a structure containing a C99 flexible array - member, or a union containing such a structure, is not the last field of - another structure, is deprecated. Refer to + Support for the GCC extension that a structure containing a C99 flexible + array (and any union containing a member of such structure) can be a + member of a structure has been deprecated for the case that it is not + the last member. Refer to <a href="https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html"> Zero Length Arrays</a>. Any code relying on this extension should be modifed to ensure that Tobias PS: C17 has: "A structure or union shall not contain a member with incomplete or function type (hence, a structure shall not contain an instance of itself, but may contain a pointer to an instance of itself), except that the last member of a structure with more than one named member may have incomplete array type; such a structure (and any union containing, possibly recursively, a member that is such a structure) shall not be a member of a structure or an element of an array." ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955