It has been standardized in C2y. gcc/c/ChangeLog:
* c-parser.cc (c_parser_sizeof_or_countof_expression): Add -Wpedantic diagnostic for _Countof in <= C23 mode. gcc/testsuite/ChangeLog: * gcc.dg/countof-compat.c * gcc.dg/countof-no-compat.c * gcc.dg/countof-pedantic.c * gcc.dg/countof-pedantic-errors.c: Test pedantic diagnostics for _Countof. Signed-off-by: Alejandro Colomar <a...@kernel.org> --- gcc/c/c-parser.cc | 4 ++++ gcc/testsuite/gcc.dg/countof-compat.c | 8 ++++++++ gcc/testsuite/gcc.dg/countof-no-compat.c | 5 +++++ gcc/testsuite/gcc.dg/countof-pedantic-errors.c | 8 ++++++++ gcc/testsuite/gcc.dg/countof-pedantic.c | 8 ++++++++ 5 files changed, 33 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/countof-compat.c create mode 100644 gcc/testsuite/gcc.dg/countof-no-compat.c create mode 100644 gcc/testsuite/gcc.dg/countof-pedantic-errors.c create mode 100644 gcc/testsuite/gcc.dg/countof-pedantic.c diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 87700339394..d2193ad2f34 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -10637,6 +10637,10 @@ c_parser_sizeof_or_countof_expression (c_parser *parser, enum rid rid) start = c_parser_peek_token (parser)->location; + if (rid == RID_COUNTOF) + pedwarn_c23 (start, OPT_Wpedantic, + "ISO C does not support %qs before C23", op_name); + c_parser_consume_token (parser); c_inhibit_evaluation_warnings++; if (rid == RID_COUNTOF) diff --git a/gcc/testsuite/gcc.dg/countof-compat.c b/gcc/testsuite/gcc.dg/countof-compat.c new file mode 100644 index 00000000000..e1278d28c5e --- /dev/null +++ b/gcc/testsuite/gcc.dg/countof-compat.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors -Wc23-c2y-compat" } */ + +#include <stdcountof.h> + +int a[1]; +int b[countof(a)]; +int c[_Countof(a)]; /* { dg-warning "ISO C does not support" */ diff --git a/gcc/testsuite/gcc.dg/countof-no-compat.c b/gcc/testsuite/gcc.dg/countof-no-compat.c new file mode 100644 index 00000000000..4a244cf222f --- /dev/null +++ b/gcc/testsuite/gcc.dg/countof-no-compat.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors -Wno-c23-c2y-compat" } */ + +int a[1]; +int b[_Countof(a)]; diff --git a/gcc/testsuite/gcc.dg/countof-pedantic-errors.c b/gcc/testsuite/gcc.dg/countof-pedantic-errors.c new file mode 100644 index 00000000000..d7992c75865 --- /dev/null +++ b/gcc/testsuite/gcc.dg/countof-pedantic-errors.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +#include <stdcountof.h> + +int a[1]; +int b[countof(a)]; +int c[_Countof(a)]; /* { dg-error "ISO C does not support" */ diff --git a/gcc/testsuite/gcc.dg/countof-pedantic.c b/gcc/testsuite/gcc.dg/countof-pedantic.c new file mode 100644 index 00000000000..76ff1c72807 --- /dev/null +++ b/gcc/testsuite/gcc.dg/countof-pedantic.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic" } */ + +#include <stdcountof.h> + +int a[1]; +int b[countof(a)]; +int c[_Countof(a)]; /* { dg-warning "ISO C does not support" */ -- 2.49.0