Hi, Sebastian, Looks like that the behavior you described is correct. What’s your major concern? ( a little confused).
Qing On May 6, 2024, at 09:29, Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: On 06.05.24 09:08, Richard Biener wrote: On Sat, 4 May 2024, Sebastian Huber wrote: On 07.08.23 16:22, Qing Zhao via Gcc-patches wrote: Hi, This is the 2nd version of the patch. Comparing to the 1st version, the only change is to address Richard's comment on refering a warning option for diagnosing deprecated behavior. Okay for committing? thanks. Qing ====== *htdocs/gcc-14/changes.html (Caveats): Add notice about deprecating a C extension about flexible array members. --- htdocs/gcc-14/changes.html | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/htdocs/gcc-14/changes.html b/htdocs/gcc-14/changes.html index dad1ba53..eae25f1a 100644 --- a/htdocs/gcc-14/changes.html +++ 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>. + Any code relying on this extension should be modifed to ensure that + C99 flexible array members only end up at the ends of structures. + Please use the warning option + <a href="https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wflex-array-member-not-at-end"><code>-Wflex-array-member-not-at-end</code></a> to + identify all such cases in the source code and modify them. + </li> </ul> I have a question with respect to the static initialization of flexible array members. According to the documentation this is supported by GCC: https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html "GCC allows static initialization of flexible array members. This is equivalent to defining a new structure containing the original structure followed by an array of sufficient size to contain the data. E.g. in the following, f1 is constructed as if it were declared like f2. struct f1 { int x; int y[]; } f1 = { 1, { 2, 3, 4 } }; struct f2 { struct f1 f1; int data[3]; } f2 = { { 1 }, { 2, 3, 4 } }; " However, when I compile this code, I get a warning like this: flex-array.c:6:13: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] 6 | struct f1 f1; int data[3]; | In general, I agree that flexible array members should be at the end, however the support for static initialization is quite important from my point of view especially for applications for embedded systems. Here, dynamic allocations may not be allowed or feasible. I do not get a diagnostic for this on trunk? And I agree there shouldn't be any. It seems that this warning is not enabled by -Wall and -Wextra. I tried this: gcc -Wflex-array-member-not-at-end -S -o - flex-array.c .file "flex-array.c" flex-array.c:6:13: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] 6 | struct f1 f1; int data[3]; | ^~ .text .globl f1 .data .align 4 .type f1, @object .size f1, 16 f1: .long 1 .long 2 .long 3 .long 4 .globl f2 .align 16 .type f2, @object .size f2, 16 f2: .long 1 .long 2 .long 3 .long 4 .ident "GCC: (GNU) 15.0.0 20240506 (experimental) [master ec1cdad89af]" .section .note.GNU-stack,"",@progbits -- embedded brains GmbH & Co. KG Herr Sebastian HUBER Dornierstr. 4 82178 Puchheim Germany email: sebastian.hu...@embedded-brains.de<mailto:sebastian.hu...@embedded-brains.de> phone: +49-89-18 94 741 - 16 fax: +49-89-18 94 741 - 08 Registergericht: Amtsgericht München Registernummer: HRB 157899 Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler Unsere Datenschutzerklärung finden Sie hier: https://embedded-brains.de/datenschutzerklaerung/