Ping. The patch has been committed to trunk 2 months ago.
Okay for committing to GCC15 now? thanks. Qing > On Jul 17, 2025, at 17:26, Qing Zhao <qing.z...@oracle.com> wrote: > > The root cause of the bug is: the TYPE_INCLUDES_FLEXARRAY marking of the > structure type is not copied to its aliased type. > The fix is to copy this marking to all the variant types of the current > structure type. > > PR c/120353 > > gcc/c/ChangeLog: > > * c-decl.cc (finish_struct): Copy TYPE_INCLUDES_FLEXARRAY marking > to all the variant types of the current structure type. > > gcc/testsuite/ChangeLog: > > * gcc.dg/pr120353.c: New test. > > (cherry picked from commit f37c5f1d88c9da17f16cdb33e7c9d43e4bb5f64d) > > bootstrapped and regression tested on both x86 and aarch64. > > Okay for backporting to GCC15? > > Qing > --- > gcc/c/c-decl.cc | 1 + > gcc/testsuite/gcc.dg/pr120353.c | 11 +++++++++++ > 2 files changed, 12 insertions(+) > create mode 100644 gcc/testsuite/gcc.dg/pr120353.c > > diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc > index 8c420f22976..42e17dcdbf8 100644 > --- a/gcc/c/c-decl.cc > +++ b/gcc/c/c-decl.cc > @@ -9909,6 +9909,7 @@ finish_struct (location_t loc, tree t, tree fieldlist, > tree attributes, > C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t); > C_TYPE_VARIABLY_MODIFIED (x) = C_TYPE_VARIABLY_MODIFIED (t); > C_TYPE_INCOMPLETE_VARS (x) = NULL_TREE; > + TYPE_INCLUDES_FLEXARRAY (x) = TYPE_INCLUDES_FLEXARRAY (t); > } > > /* Update type location to the one of the definition, instead of e.g. > diff --git a/gcc/testsuite/gcc.dg/pr120353.c b/gcc/testsuite/gcc.dg/pr120353.c > new file mode 100644 > index 00000000000..6f8e4acf7f2 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/pr120353.c > @@ -0,0 +1,11 @@ > +/* PR120353: Test for -Wflex-array-member-not-at-end on structure with > + typedef. */ > +/* { dg-do compile } */ > +/* { dg-options "-Wflex-array-member-not-at-end" } */ > + > +typedef struct flex flex_t; > +struct flex { int n; int data[]; }; > +struct out_flex_mid {flex_t flex_data; int m; }; /* { dg-warning "structure > containing a flexible array member is not at the end of another structure" } > */ > + > +typedef struct flex flex_t1; > +struct out_flex_mid1 {flex_t1 flex_data1; int n; }; /* { dg-warning > "structure containing a flexible array member is not at the end of another > structure" } */ > -- > 2.31.1 >