Hi!
Here's another revision of this patch set.
v23 changes:
- More specific change logs.
- #define assert() instead of #include'ing <assert.h>.
`make check` says all's good. I haven't diffed against master this
time, because that's slow as hell, and the changes are minimal. I've
only ran `make check -j24` once at the tip, and all the countof tests
pass.
Have a lovely night!
Alex
Alejandro Colomar (3):
c: Add _Countof operator
c: Add <stdcountof.h>
c: Add -Wpedantic diagnostic for _Countof
gcc/Makefile.in | 1 +
gcc/c-family/c-common.cc | 26 ++++
gcc/c-family/c-common.def | 3 +
gcc/c-family/c-common.h | 2 +
gcc/c/c-decl.cc | 22 +++-
gcc/c/c-parser.cc | 63 +++++++--
gcc/c/c-tree.h | 4 +
gcc/c/c-typeck.cc | 115 +++++++++++++++-
gcc/doc/extend.texi | 30 +++++
gcc/ginclude/stdcountof.h | 31 +++++
gcc/testsuite/gcc.dg/countof-compat.c | 8 ++
gcc/testsuite/gcc.dg/countof-compile.c | 124 ++++++++++++++++++
gcc/testsuite/gcc.dg/countof-no-compat.c | 5 +
.../gcc.dg/countof-pedantic-errors.c | 8 ++
gcc/testsuite/gcc.dg/countof-pedantic.c | 8 ++
gcc/testsuite/gcc.dg/countof-stdcountof.c | 24 ++++
gcc/testsuite/gcc.dg/countof-vla.c | 35 +++++
gcc/testsuite/gcc.dg/countof-vmt.c | 20 +++
gcc/testsuite/gcc.dg/countof-zero-compile.c | 38 ++++++
gcc/testsuite/gcc.dg/countof-zero.c | 31 +++++
gcc/testsuite/gcc.dg/countof.c | 120 +++++++++++++++++
21 files changed, 694 insertions(+), 24 deletions(-)
create mode 100644 gcc/ginclude/stdcountof.h
create mode 100644 gcc/testsuite/gcc.dg/countof-compat.c
create mode 100644 gcc/testsuite/gcc.dg/countof-compile.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
create mode 100644 gcc/testsuite/gcc.dg/countof-stdcountof.c
create mode 100644 gcc/testsuite/gcc.dg/countof-vla.c
create mode 100644 gcc/testsuite/gcc.dg/countof-vmt.c
create mode 100644 gcc/testsuite/gcc.dg/countof-zero-compile.c
create mode 100644 gcc/testsuite/gcc.dg/countof-zero.c
create mode 100644 gcc/testsuite/gcc.dg/countof.c
Range-diff against v22:
1: 1c983c3baa7f ! 1: 5040a7d25a96 c: Add _Countof operator
@@ Commit message
gcc/c-family/ChangeLog:
- * c-common.h
- * c-common.def
- * c-common.cc (c_countof_type): Add _Countof operator.
+ * c-common.h: Add RID_COUNTOF.
+ (c_countof_type): New function prototype.
+ * c-common.def (COUNTOF_EXPR): New tree.
+ * c-common.cc
+ (c_common_reswords): Add RID_COUNTOF entry.
+ (c_countof_type): New function.
gcc/c/ChangeLog:
* c-tree.h
- (c_expr_countof_expr, c_expr_countof_type)
+ (in_countof): Add global variable declaration.
+ (c_expr_countof_expr): Add function prototype.
+ (c_expr_countof_type): Add function prototype.
* c-decl.cc
- (start_struct, finish_struct)
- (start_enum, finish_enum)
+ (start_struct, finish_struct): Add support for _Countof.
+ (start_enum, finish_enum): Add support for _Countof.
* c-parser.cc
- (c_parser_sizeof_expression)
- (c_parser_countof_expression)
- (c_parser_sizeof_or_countof_expression)
- (c_parser_unary_expression)
+ (c_parser_sizeof_expression): New macro.
+ (c_parser_countof_expression): New macro.
+ (c_parser_sizeof_or_countof_expression):
+ Rename function and add support for _Countof.
+ (c_parser_unary_expression): Add RID_COUNTOF entry.
* c-typeck.cc
- (build_external_ref)
- (record_maybe_used_decl)
- (pop_maybe_used)
- (is_top_array_vla)
- (c_expr_countof_expr, c_expr_countof_type):
+ (in_countof): Add global variable.
+ (build_external_ref): Add support for _Countof.
+ (record_maybe_used_decl): Add support for _Countof.
+ (pop_maybe_used): Add support for _Countof.
+ (is_top_array_vla): New function.
+ (c_expr_countof_expr, c_expr_countof_type): New functions.
Add _Countof operator.
gcc/testsuite/ChangeLog:
- * gcc.dg/countof-compile.c
- * gcc.dg/countof-vla.c
- * gcc.dg/countof-vmt.c
- * gcc.dg/countof-zero-compile.c
- * gcc.dg/countof-zero.c
- * gcc.dg/countof.c: Add tests for _Countof operator.
+ * gcc.dg/countof-compile.c: Compile-time tests for _Countof.
+ * gcc.dg/countof-vla.c: Tests for _Countof with VLAs.
+ * gcc.dg/countof-vmt.c: Tests for _Countof with other VMTs.
+ * gcc.dg/countof-zero-compile.c:
+ Compile-time tests for _Countof with zero-sized arrays.
+ * gcc.dg/countof-zero.c:
+ Tests for _Countof with zero-sized arrays.
+ * gcc.dg/countof.c: Tests for _Countof.
Suggested-by: Xavier Del Campo Romero <[email protected]>
Co-authored-by: Martin Uecker <[email protected]>
@@ gcc/testsuite/gcc.dg/countof-vmt.c (new)
+/* { dg-do run } */
+/* { dg-options "-std=c2y" } */
+
-+#undef NDEBUG
-+#include <assert.h>
++#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+void
+inner_vla_noeval (void)
@@ gcc/testsuite/gcc.dg/countof-zero.c (new)
+/* { dg-do run } */
+/* { dg-options "-std=c2y" } */
+
-+#undef NDEBUG
-+#include <assert.h>
++#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+void
+vla (void)
@@ gcc/testsuite/gcc.dg/countof.c (new)
+/* { dg-do run } */
+/* { dg-options "-std=c2y -pedantic-errors" } */
+
-+#undef NDEBUG
-+#include <assert.h>
++#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+void
+array (void)
2: 418f81175e78 ! 2: a560cf1ae23b c: Add <stdcountof.h>
@@ gcc/testsuite/gcc.dg/countof-stdcountof.c (new)
+
+#include <stdcountof.h>
+
-+#undef NDEBUG
-+#include <assert.h>
++#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+extern int strcmp (const char *, const char *);
+
3: c44ef4a2c751 ! 3: b1974a4507bc c: Add -Wpedantic diagnostic for _Countof
@@ Commit message
gcc/testsuite/ChangeLog:
- * gcc.dg/countof-compat.c
- * gcc.dg/countof-no-compat.c
- * gcc.dg/countof-pedantic.c
+ * gcc.dg/countof-compat.c:
+ Test _Countof diagnostics with -Wc23-c2y-compat on C2y.
+ * gcc.dg/countof-no-compat.c:
+ Test _Countof diagnostics with -Wno-c23-c2y-compat on C23.
+ * gcc.dg/countof-pedantic.c:
+ Test _Countof diagnostics with -pedantic on C23.
* gcc.dg/countof-pedantic-errors.c:
- Test pedantic diagnostics for _Countof.
+ Test _Countof diagnostics with -pedantic-errors on C23.
Signed-off-by: Alejandro Colomar <[email protected]>
base-commit: 90c6ccebd762ae920690fce20cd3f2b8e24357a7
--
2.49.0