Hi, Jakub, I’d like to ping this simple patch again. It’s based on your suggestion in PR116016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116016#c28 Could you please take a look at the patch and let me know whether its okay for committing to trunk? thanks. Qing > On Aug 12, 2024, at 09:51, Qing Zhao <qing.z...@oracle.com> wrote: > > Gentle ping on this simple patch. > > thanks. > > Qing > > > >> On Aug 5, 2024, at 16:17, Qing Zhao <qing.z...@oracle.com> wrote: >> >> Compared to the first version, the major changes are: >> >> 1. Changed the error as a warning with -Wattributes per Jakub and Jason's >> comments. >> 2. Update documentation accordingly. >> 3. Move the testing case to g++.dg/ext >> Add one more new testing case for C++11 >> Adjust the testing case according to the new warning. >> >> Bootstrapped and regression tested on both aarch64 and x86. >> Okay for committing? >> >> thanks. >> >> Qing. >> >> ================= >> >> The "counted_by" attribute currently is only supported in C, mention this >> explicitly in documentation and also issue warnings when see "counted_by" >> attribute in C++ with -Wattributes. >> >> gcc/c-family/ChangeLog: >> >> * c-attribs.cc (handle_counted_by_attribute): Is ignored and issues >> warning with -Wattributes in C++ for now. >> >> gcc/ChangeLog: >> >> * doc/extend.texi: Explicitly mentions counted_by is available >> only in C for now. >> >> gcc/testsuite/ChangeLog: >> >> * g++.dg/ext/flex-array-counted-by.C: New test. >> * g++.dg/ext/flex-array-counted-by-2.C: New test. >> --- >> gcc/c-family/c-attribs.cc | 10 +++++++++- >> gcc/doc/extend.texi | 3 +++ >> gcc/testsuite/g++.dg/ext/flex-array-counted-by-2.C | 13 +++++++++++++ >> gcc/testsuite/g++.dg/ext/flex-array-counted-by.C | 11 +++++++++++ >> 4 files changed, 36 insertions(+), 1 deletion(-) >> create mode 100644 gcc/testsuite/g++.dg/ext/flex-array-counted-by-2.C >> create mode 100644 gcc/testsuite/g++.dg/ext/flex-array-counted-by.C >> >> diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc >> index 685f212683f..4f064457dc4 100644 >> --- a/gcc/c-family/c-attribs.cc >> +++ b/gcc/c-family/c-attribs.cc >> @@ -2859,8 +2859,16 @@ handle_counted_by_attribute (tree *node, tree name, >> tree argval = TREE_VALUE (args); >> tree old_counted_by = lookup_attribute ("counted_by", DECL_ATTRIBUTES >> (decl)); >> >> + /* This attribute is not supported in C++. */ >> + if (c_dialect_cxx ()) >> + { >> + warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wattributes, >> + "%qE attribute is not supported for C++ for now, ignored", >> + name); >> + *no_add_attrs = true; >> + } >> /* This attribute only applies to field decls of a structure. */ >> - if (TREE_CODE (decl) != FIELD_DECL) >> + else if (TREE_CODE (decl) != FIELD_DECL) >> { >> error_at (DECL_SOURCE_LOCATION (decl), >> "%qE attribute is not allowed for a non-field" >> diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi >> index 48b27ff9f39..827044670e8 100644 >> --- a/gcc/doc/extend.texi >> +++ b/gcc/doc/extend.texi >> @@ -7848,6 +7848,9 @@ The @code{counted_by} attribute may be attached to the >> C99 flexible array >> member of a structure. It indicates that the number of the elements of the >> array is given by the field "@var{count}" in the same structure as the >> flexible array member. >> +This attribute is available only in C for now. >> +In C++, this attribute is ignored by default, and the compiler issues a >> +warning with @option{-Wattributes}. >> GCC may use this information to improve detection of object size information >> for such structures and provide better results in compile-time diagnostics >> and runtime features like the array bound sanitizer and >> diff --git a/gcc/testsuite/g++.dg/ext/flex-array-counted-by-2.C >> b/gcc/testsuite/g++.dg/ext/flex-array-counted-by-2.C >> new file mode 100644 >> index 00000000000..6ac2b509b68 >> --- /dev/null >> +++ b/gcc/testsuite/g++.dg/ext/flex-array-counted-by-2.C >> @@ -0,0 +1,13 @@ >> +/* Testing the fact that the attribute counted_by is not supported in C++. >> */ >> +/* { dg-do compile { target c++11 } } */ >> +/* { dg-options "-Wattributes" } */ >> + >> +struct trailing { >> + int count; >> + int field [[gnu::counted_by (count)]] []; /* { dg-warning "attribute is >> not supported for C\\+\\+ for now, ignored" } */ >> +}; >> + >> +struct trailing1 { >> + int count1; >> + [[gnu::counted_by (count)]] int field []; /* { dg-warning "attribute is >> not supported for C\\+\\+ for now, ignored" } */ >> +}; >> diff --git a/gcc/testsuite/g++.dg/ext/flex-array-counted-by.C >> b/gcc/testsuite/g++.dg/ext/flex-array-counted-by.C >> new file mode 100644 >> index 00000000000..8bc79d459df >> --- /dev/null >> +++ b/gcc/testsuite/g++.dg/ext/flex-array-counted-by.C >> @@ -0,0 +1,11 @@ >> +/* Testing the fact that the attribute counted_by is not supported in C++. >> */ >> +/* { dg-do compile } */ >> +/* { dg-options "-Wattributes" } */ >> + >> +int size; >> +int x __attribute ((counted_by (size))); /* { dg-warning "attribute is not >> supported for C\\+\\+ for now, ignored" } */ >> + >> +struct trailing { >> + int count; >> + int field[] __attribute ((counted_by (count))); /* { dg-warning >> "attribute is not supported for C\\+\\+ for now, ignored" } */ >> +}; >> -- >> 2.31.1 >> >