On Wed, May 21, 2025 at 02:17:58AM +0200, Alejandro Colomar wrote:
> 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.

BTW, I didn't paste the test results.  Here they are:

        $ cat ./gcc/testsuite/gcc/gcc.sum | grep countof
        PASS: gcc.dg/countof-compat.c  (test for warnings, line 8)
        PASS: gcc.dg/countof-compat.c (test for excess errors)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 114)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 123)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 23)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 27)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 38)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 46)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 64)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 67)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 70)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 82)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 83)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 84)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 85)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 86)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 87)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 88)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 89)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 90)
        PASS: gcc.dg/countof-compile.c  (test for errors, line 94)
        PASS: gcc.dg/countof-compile.c (test for excess errors)
        PASS: gcc.dg/countof-no-compat.c (test for excess errors)
        PASS: gcc.dg/countof-pedantic-errors.c  (test for errors, line 8)
        PASS: gcc.dg/countof-pedantic-errors.c (test for excess errors)
        PASS: gcc.dg/countof-pedantic.c  (test for warnings, line 8)
        PASS: gcc.dg/countof-pedantic.c (test for excess errors)
        PASS: gcc.dg/countof-stdcountof.c (test for excess errors)
        PASS: gcc.dg/countof-stdcountof.c execution test
        PASS: gcc.dg/countof-vla.c (test for excess errors)
        PASS: gcc.dg/countof-vmt.c (test for excess errors)
        PASS: gcc.dg/countof-vmt.c execution test
        PASS: gcc.dg/countof-zero-compile.c (test for excess errors)
        PASS: gcc.dg/countof-zero.c (test for excess errors)
        PASS: gcc.dg/countof-zero.c execution test
        PASS: gcc.dg/countof.c (test for excess errors)
        PASS: gcc.dg/countof.c execution test

> 
> 
> 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 <xavi....@tutanota.com>
>          Co-authored-by: Martin Uecker <uec...@tugraz.at>
>     @@ 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 <a...@kernel.org>
>      
> 
> base-commit: 90c6ccebd762ae920690fce20cd3f2b8e24357a7
> -- 
> 2.49.0
> 

-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature

Reply via email to