Hi,The address [email protected] is not bouncing.  Its my email address, 
and I'm getting the emails in this discussion just fine.However, I don't think 
I have anything to contribute here, so I don't object to being removed from the 
discussion. I am not a gcc developer, but as a long term user I  occasionally 
post on the developer mailing list. I don't remember having posted about a 
potential __lengthof__ operator, but it is certainly possible. On behalf of all 
gcc users, thank you for your efforts in working to improve gcc, no matter how 
this proposal turns out.Mvh.,David [email protected]
-------- Original message --------From: Alejandro Colomar <[email protected]> 
Date: 07/08/2024  01:26  (GMT+01:00) To: [email protected] Cc: Martin 
Uecker <[email protected]>, Xavier Del Campo Romero <[email protected]>, 
Joseph Myers <[email protected]>, Gabriel Ravier <[email protected]>, Jakub 
Jelinek <[email protected]>, Kees Cook <[email protected]>, Qing Zhao 
<[email protected]>, Jens Gustedt <[email protected]>, David Brown 
<[email protected]>, Florian Weimer <[email protected]>, Andreas Schwab 
<[email protected]> Subject: Re: [PATCH v5 0/3] c: Add __lengthof__ 
operator <[email protected]> is bouncing.  FYI.  I've removed it.On Wed, 
Aug 07, 2024 at 01:12:00AM GMT, Alejandro Colomar wrote:> Hi!> > This is ready 
for review.> > v5:> > -  Add changelog entries.> -  Wording fixes in commit 
messages.> -  s/sizeof/lengthof/ in comment.> -  CC += David, Florian, Andreas  
[Qing]> -  Docs: Remove some details about future directions.  [Qing]> -  Docs: 
Add examples.  [Qing]> -  Docs: Clarify when __lengthof__ evaluates as a 
constant expression>    and when it evaluates as a run-time value.  [Joseph, 
Qing]> -  Tests: Use several -Wno-* flags to turn off unwanted warnings.>    
[Martin, Joseph]> -  Tests: Merge into the same commit that adds the feature.> 
-  Tests: Fix style (whitespace).> > I won't paste the example program I used 
for development, since it's the> same as in v4.  Check that cover letter if 
necessary.> > When reviewing, mind that some parts of the code have been 
blindly> pasted from sizeof, and might not make much sense; I didn't fully> 
understand some parts.  However, it seems to behave well, and more or> less it 
makes sense.  Just be careful about it.> > At the bottom of this message is the 
range-diff against v4.> > Have a lovely night!> Alex> > > BTW, I've tested that 
there are no regressions:> >  alx@debian:~/src/gnu/gcc$ find len0 -type f>    
len0/host-x86_64-pc-linux-gnu/gcc/testsuite/gcc/gcc.sum>        
len0/host-x86_64-pc-linux-gnu/gcc/testsuite/gfortran/gfortran.sum>      
len0/host-x86_64-pc-linux-gnu/gcc/testsuite/objc/objc.sum>      
len0/host-x86_64-pc-linux-gnu/gcc/testsuite/g++/g++.sum>        
len0/x86_64-pc-linux-gnu/libitm/testsuite/libitm.sum>   
len0/x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.sum>         
len0/x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.sum>     
len0/x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.sum>  
alx@debian:~/src/gnu/gcc$ find len1 -type f>    
len1/host-x86_64-pc-linux-gnu/gcc/testsuite/gcc/gcc.sum>        
len1/host-x86_64-pc-linux-gnu/gcc/testsuite/gfortran/gfortran.sum>      
len1/host-x86_64-pc-linux-gnu/gcc/testsuite/objc/objc.sum>      
len1/host-x86_64-pc-linux-gnu/gcc/testsuite/g++/g++.sum>        
len1/x86_64-pc-linux-gnu/libitm/testsuite/libitm.sum>   
len1/x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.sum>         
len1/x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.sum>     
len1/x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.sum>  
alx@debian:~/src/gnu/gcc$ cat <(cd len0; find -type f) \>                       
        | while read f; do>                                     diff -u 
"len0/$f" "len1/$f";>                           done;>  --- 
len0/./host-x86_64-pc-linux-gnu/gcc/testsuite/gcc/gcc.sum   2024-08-06>     
+22:22:44.514175252 +0200>      +++ 
len1/./host-x86_64-pc-linux-gnu/gcc/testsuite/gcc/gcc.sum   2024-08-06>     
+23:29:53.693730123 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on Tue 
Aug  6 19:28:53 2024>   +Test run by alx on Tue Aug  6 22:49:12 2024>    Native 
configuration is x86_64-pc-linux-gnu> >                         === gcc tests 
===>      @@ -86504,6 +86504,15 @@>        PASS: gcc.dg/large-size-array.c  
(test for errors, line 19)>    PASS: gcc.dg/large-size-array.c (test for excess 
errors)>       UNSUPPORTED: gcc.dg/lazy-ptr-test.c>   +PASS: 
gcc.dg/lengthof-compile.c  (test for errors, line 11)>   +PASS: 
gcc.dg/lengthof-compile.c  (test for errors, line 15)>   +PASS: 
gcc.dg/lengthof-compile.c  (test for errors, line 27)>   +PASS: 
gcc.dg/lengthof-compile.c  (test for errors, line 42)>   +PASS: 
gcc.dg/lengthof-compile.c  (test for errors, line 45)>   +PASS: 
gcc.dg/lengthof-compile.c  (test for errors, line 48)>   +PASS: 
gcc.dg/lengthof-compile.c (test for excess errors)>      +PASS: 
gcc.dg/lengthof.c (test for excess errors)>      +PASS: gcc.dg/lengthof.c 
execution test>         PASS: gcc.dg/limits-width-1.c (test for excess errors)> 
        PASS: gcc.dg/limits-width-2.c (test for excess errors)>         PASS: 
gcc.dg/live-patching-1.c (test for excess errors)>       @@ -204639,7 +204648,7 
@@> >                    === gcc Summary ===> >  -# of expected passes          
 199780>         +# of expected passes           199789>          # of 
unexpected failures       31>      # of unexpected successes      2>       # of 
expected failures         1463>   --- 
len0/./host-x86_64-pc-linux-gnu/gcc/testsuite/gfortran/gfortran.sum 2024-08-06> 
    +22:22:44.546175561 +0200>      +++ 
len1/./host-x86_64-pc-linux-gnu/gcc/testsuite/gfortran/gfortran.sum 2024-08-06> 
    +23:29:53.877731933 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on 
Tue Aug  6 19:28:53 2024>   +Test run by alx on Tue Aug  6 22:49:12 2024>    
Native configuration is x86_64-pc-linux-gnu> >                         === 
gfortran tests ===>         --- 
len0/./host-x86_64-pc-linux-gnu/gcc/testsuite/objc/objc.sum 2024-08-06>     
+22:22:44.462174752 +0200>      +++ 
len1/./host-x86_64-pc-linux-gnu/gcc/testsuite/objc/objc.sum 2024-08-06>     
+23:29:53.845731618 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on Tue 
Aug  6 19:28:53 2024>   +Test run by alx on Tue Aug  6 22:49:12 2024>    Native 
configuration is x86_64-pc-linux-gnu> >                         === objc tests 
===>     --- len0/./host-x86_64-pc-linux-gnu/gcc/testsuite/g++/g++.sum   
2024-08-06>     +22:22:44.622176292 +0200>      +++ 
len1/./host-x86_64-pc-linux-gnu/gcc/testsuite/g++/g++.sum   2024-08-06>     
+23:29:53.781730989 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on Tue 
Aug  6 19:28:53 2024>   +Test run by alx on Tue Aug  6 22:49:12 2024>    Native 
configuration is x86_64-pc-linux-gnu> >                         === g++ tests 
===>      --- len0/./x86_64-pc-linux-gnu/libitm/testsuite/libitm.sum      
2024-08-06>     +22:22:46.206191541 +0200>      +++ 
len1/./x86_64-pc-linux-gnu/libitm/testsuite/libitm.sum      2024-08-06>     
+23:29:55.573748613 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on Tue 
Aug  6 19:28:53 2024>   +Test run by alx on Tue Aug  6 22:49:12 2024>    Native 
configuration is x86_64-pc-linux-gnu> >                         === libitm 
tests ===>   --- len0/./x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.sum    
2024-08-06>     +22:22:45.694186612 +0200>      +++ 
len1/./x86_64-pc-linux-gnu/libgomp/testsuite/libgomp.sum    2024-08-06>     
+23:29:54.717740194 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on Tue 
Aug  6 19:28:53 2024>   +Test run by alx on Tue Aug  6 22:49:12 2024>    Native 
configuration is x86_64-pc-linux-gnu> >                         === libgomp 
tests ===>  --- len0/./x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.sum    
    2024-08-06>     +22:22:46.110190617 +0200>      +++ 
len1/./x86_64-pc-linux-gnu/libatomic/testsuite/libatomic.sum        2024-08-06> 
    +23:29:55.393746843 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on 
Tue Aug  6 19:28:53 2024>   +Test run by alx on Tue Aug  6 22:49:12 2024>    
Native configuration is x86_64-pc-linux-gnu> >                         === 
libatomic tests ===>        --- 
len0/./x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.sum     2024-08-06> 
    +22:22:45.998189539 +0200>      +++ 
len1/./x86_64-pc-linux-gnu/libstdc++-v3/testsuite/libstdc++.sum     2024-08-06> 
    +23:29:55.137744325 +0200>      @@ -1,4 +1,4 @@>        -Test run by alx on 
Tue Aug  6 19:28:54 2024>   +Test run by alx on Tue Aug  6 22:49:13 2024>    
Native configuration is x86_64-pc-linux-gnu> >                         === 
libstdc++ tests ===> > > > > > Alejandro Colomar (3):>   gcc/: Rename 
array_type_nelts() => array_type_nelts_minus_one()>   Merge definitions of 
array_type_nelts_top()>   c: Add __lengthof__ operator> >  
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                         |  30 ++++-->  gcc/c/c-fold.cc          
               |   7 +->  gcc/c/c-parser.cc                       |  61 
+++++++++--->  gcc/c/c-tree.h                          |   4 +>  
gcc/c/c-typeck.cc                       | 114 ++++++++++++++++++++->  
gcc/config/aarch64/aarch64.cc           |   2 +->  gcc/config/i386/i386.cc      
           |   2 +->  gcc/cp/cp-tree.h                        |   1 ->  
gcc/cp/decl.cc                          |   2 +->  gcc/cp/init.cc               
           |   8 +->  gcc/cp/lambda.cc                        |   3 +->  
gcc/cp/operators.def                    |   1 +>  gcc/cp/tree.cc                
          |  13 --->  gcc/doc/extend.texi                     |  23 +++++>  
gcc/expr.cc                             |   8 +->  gcc/fortran/trans-array.cc   
           |   2 +->  gcc/fortran/trans-openmp.cc             |   4 +->  
gcc/rust/backend/rust-tree.cc           |  13 --->  
gcc/rust/backend/rust-tree.h            |   2 ->  gcc/target.h                  
          |   3 +>  gcc/testsuite/gcc.dg/lengthof-compile.c |  49 +++++++++>  
gcc/testsuite/gcc.dg/lengthof.c         | 127 ++++++++++++++++++++++++>  
gcc/tree.cc                             |  17 +++->  gcc/tree.h                 
             |   3 +->  27 files changed, 451 insertions(+), 79 deletions(-)>  
create mode 100644 gcc/testsuite/gcc.dg/lengthof-compile.c>  create mode 100644 
gcc/testsuite/gcc.dg/lengthof.c> > Range-diff against v4:> 1:  73010cb4af6 = 1: 
 73010cb4af6 gcc/: Rename array_type_nelts() => array_type_nelts_minus_one()> 
2:  2bb966a0a89 ! 2:  9b835478721 Merge definitions of array_type_nelts_top()>  
   @@ Commit message>          Merge definitions of array_type_nelts_top()>     
 >          There were two identical definitions, and none of them are 
available>     -    where they are needed for implementing __lengthof__().  
Merge them, and>     +    where they are needed for implementing __lengthof__.  
Merge them, and>          provide the single definition in gcc/tree.{h,cc}, 
where it's available>     -    for __lengthof__().>     +    for __lengthof__, 
which will be added in the following commit.>     +>     +    gcc/ChangeLog:>   
  +>     +            * tree.h (array_type_nelts_top):>     +            * 
tree.cc (array_type_nelts_top): Define function (moved from>     +            
gcc/cp/).>     +>     +    gcc/cp/ChangeLog:>     +>     +            * 
cp-tree.h (array_type_nelts_top):>     +            * tree.cc 
(array_type_nelts_top): Remove function (move>     +            to gcc/).>     
+>     +    gcc/rust/ChangeLog:>     +>     +            * backend/rust-tree.h 
(array_type_nelts_top):>     +            * backend/rust-tree.cc 
(array_type_nelts_top): Remove function.>      >          Signed-off-by: 
Alejandro Colomar <[email protected]>>      > 3:  e2dbfc43b14 ! 3:  af05d01e68d 
c: Add __lengthof__() operator (n2529)>     @@ Metadata>      Author: Alejandro 
Colomar <[email protected]>>      >       ## Commit message ##>     -    c: Add 
__lengthof__() operator (n2529)>     +    c: Add __lengthof__ operator>      >  
   -    This operator is similar to sizeof() but can only be applied to an>     
-    array, and returns its length (number of elements).>     +    This 
operator is similar to sizeof but can only be applied to an array,>     +    
and returns its length (number of elements).>      >          FUTURE 
DIRECTIONS:>      >     -            We could make it work with array 
parameters to functions, and>     -            somehow magically return the 
length designator of the array,>     -            regardless of it being really 
a pointer.>     +      We could make it work with array parameters to 
functions, and>     +      somehow magically return the length designator of 
the array,>     +      regardless of it being really a pointer.>      >     -   
 Link: <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2529.pdf>>     -    
Link: <https://inbox.sourceware.org/gcc/[email protected]/T/>>     -    
Suggested-by: Xavier Del Campo Romero <[email protected]>>     -    
Co-developed-by: Martin Uecker <[email protected]>>     -    Cc: Gabriel Ravier 
<[email protected]>>          Cc: Joseph Myers <[email protected]>>     +   
 Cc: Gabriel Ravier <[email protected]>>          Cc: Jakub Jelinek 
<[email protected]>>          Cc: Kees Cook <[email protected]>>          
Cc: Qing Zhao <[email protected]>>          Cc: Jens Gustedt 
<[email protected]>>     +    Cc: David Brown <[email protected]>>   
  +    Cc: Florian Weimer <[email protected]>>     +    Cc: Andreas Schwab 
<[email protected]>>     +>     +    gcc/ChangeLog:>     +>     +           
 * doc/extend.texi: Document __lengthof__ operator.>     +            * 
target.h (enum type_context_kind): Add __lengthof__ operator.>     +>     +    
gcc/c-family/ChangeLog:>     +>     +            * c-common.h:>     +           
 * c-common.def:>     +            * c-common.cc (c_lengthof_type): Add 
__lengthof__ operator.>     +>     +    gcc/c/ChangeLog:>     +>     +          
  * c-tree.h>     +            (c_expr_lengthof_expr, c_expr_lengthof_type):>   
  +            * c-decl.cc>     +            (start_struct, finish_struct):>    
 +            (start_enum, finish_enum):>     +            * c-parser.cc>     + 
           (c_parser_sizeof_expression):>     +            
(c_parser_lengthof_expression):>     +            
(c_parser_sizeof_or_lengthof_expression):>     +            
(c_parser_unary_expression):>     +            * c-typeck.cc>     +            
(build_external_ref):>     +            (record_maybe_used_decl, 
pop_maybe_used):>     +            (is_top_array_vla):>     +            
(c_expr_lengthof_expr, c_expr_lengthof_type):>     +            Add 
__lengthof__operator.>     +>     +    gcc/cp/ChangeLog:>     +>     +          
  * operators.def: Add __lengthof__ operator.>     +>     +    
gcc/testsuite/ChangeLog:>     +>     +            * gcc.dg/lengthof-compile.c:> 
    +            * gcc.dg/lengthof.c: Add tests for __lengthof__ operator.>     
+>     +    Link: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2529.pdf>   
  +    Link: https://inbox.sourceware.org/gcc/[email protected]/T/>     
+    Suggested-by: Xavier Del Campo Romero <[email protected]>>     +    
Co-developed-by: Martin Uecker <[email protected]>>          Signed-off-by: 
Alejandro Colomar <[email protected]>>      >       ## gcc/c-family/c-common.cc 
##>     @@ gcc/c/c-typeck.cc: int in_alignof;>       /* The level of nesting 
inside "sizeof".  */>       int in_sizeof;>       >     -+/* The level of 
nesting inside "sizeof".  */>     ++/* The level of nesting inside "lengthof".  
*/>      +int in_lengthof;>      +>       /* The level of nesting inside 
"typeof".  */>     @@ gcc/doc/extend.texi: If the operand of the 
@code{__alignof__} expression is a fu>      +Its syntax is just like 
@code{sizeof}.>      +The operand must be a complete array type.>      +The 
operand is not evaluated>     -+if the top-level length designator is an 
integer constant expression;>     ++if the top-level length designator is an 
integer constant expression>     ++(in this case, the operator results in a 
constant expression);>      +and it is evaluated>     -+if the top-level length 
designator is not an integer constant expression.>     ++if the top-level 
length designator is not an integer constant expression>     ++(in this case, 
the operator results in a run-time value).>     ++For example:>      +>     
-+XXX: Do we want to document the following?  I think so.>     -+XXX: It would 
prevent users from relying on __lengthof__>     -+XXX: for distinguishing 
arrays from pointers.>     -+XXX: I don't want users to complain in the future> 
    -+XXX: if this doesn't report errors on function parameters anymore>     
-+XXX: and that breaks their assumptions.>     -+In the future,>     -+it might 
also accept a function parameter with array notation,>     -+an incomplete 
array whose length is specified by other means,>     -+such as attributes,>     
-+or other similar cases.>     ++@smallexample>     ++__lengthof__ (int 
[7][n++]);  // constexpr>     ++__lengthof__ (int [n++][7]);  // run-time 
value>     ++@end smallexample>      +>       @node Inline>       @section An 
Inline Function is As Fast As a Macro>     @@ gcc/target.h: enum 
type_context_kind {>         /* Creating objects of type T with static storage 
duration.  */>         TCTX_STATIC_STORAGE,>       >     +>     + ## 
gcc/testsuite/gcc.dg/lengthof-compile.c (new) ##>     +@@>     ++/* { dg-do 
compile } */>     ++/* { dg-options "-Wno-declaration-after-statement 
-Wno-pedantic -Wno-vla" } */>     ++>     ++extern int x[];>     ++>     
++void>     ++incomplete (int p[])>     ++{>     ++  unsigned n;>     ++>     
++  n = __lengthof__ (x);  /* { dg-error "incomplete" } */>     ++>     ++  /* 
We want to support the following one in the future,>     ++     but for now it 
should fail.  */>     ++  n = __lengthof__ (p);  /* { dg-error "invalid" } */>  
   ++}>     ++>     ++void>     ++fam (void)>     ++{>     ++  struct {>     ++ 
   int x;>     ++    int fam[];>     ++  } s;>     ++  unsigned n;>     ++>     
++  n = __lengthof__ (s.fam); /* { dg-error "incomplete" } */>     ++}>     ++> 
    ++void fix_fix (int i, char (*a)[3][5], int (*x)[__lengthof__ (*a)]);>     
++void fix_var (int i, char (*a)[3][i], int (*x)[__lengthof__ (*a)]);>     
++void fix_uns (int i, char (*a)[3][*], int (*x)[__lengthof__ (*a)]);>     ++>  
   ++void>     ++func (void)>     ++{>     ++  int  i3[3];>     ++  int  
i5[5];>     ++  char c35[3][5];>     ++>     ++  fix_fix (5, &c35, &i3);>     
++  fix_fix (5, &c35, &i5); /* { dg-error "incompatible-pointer-types" } */>    
 ++>     ++  fix_var (5, &c35, &i3);>     ++  fix_var (5, &c35, &i5); /* { 
dg-error "incompatible-pointer-types" } */>     ++>     ++  fix_uns (5, &c35, 
&i3);>     ++  fix_uns (5, &c35, &i5); /* { dg-error 
"incompatible-pointer-types" } */>     ++}>     +>     + ## 
gcc/testsuite/gcc.dg/lengthof.c (new) ##>     +@@>     ++/* { dg-do run } */>   
  ++/* { dg-options "-Wno-declaration-after-statement -Wno-pedantic -Wno-vla" } 
*/>     ++>     ++#undef NDEBUG>     ++#include <assert.h>>     ++>     ++void> 
    ++array (void)>     ++{>     ++  short a[7];>     ++>     ++  assert 
(__lengthof__ (a) == 7);>     ++  assert (__lengthof__ (long [0]) == 0);>     
++  assert (__lengthof__ (unsigned [99]) == 99);>     ++}>     ++>     ++void>  
   ++vla (void)>     ++{>     ++  unsigned n;>     ++>     ++  n = 99;>     ++  
assert (__lengthof__ (short [n - 10]) == 99 - 10);>     ++>     ++  int v[n / 
2];>     ++  assert (__lengthof__ (v) == 99 / 2);>     ++>     ++  n = 0;>     
++  int z[n];>     ++  assert (__lengthof__ (z) == 0);>     ++}>     ++>     
++void>     ++member (void)>     ++{>     ++  struct {>     ++    int a[8];>    
 ++  } s;>     ++>     ++  assert (__lengthof__ (s.a) == 8);>     ++}>     ++>  
   ++void>     ++vla_eval (void)>     ++{>     ++  int i;>     ++>     ++  i = 
7;>     ++  assert (__lengthof__ (struct {int x;}[i++]) == 7);>     ++  assert 
(i == 7 + 1);>     ++>     ++  int v[i];>     ++  int (*p)[i];>     ++  p = 
&v;>     ++  assert (__lengthof__ (*p++) == i);>     ++  assert (p - 1 == &v);> 
    ++}>     ++>     ++void>     ++inner_vla_noeval (void)>     ++{>     ++  
int i;>     ++>     ++  i = 3;>     ++  assert (__lengthof__ (struct {int 
x[i++];}[3]) == 3);>     ++  assert (i == 3);>     ++}>     ++>     ++void>     
++array_noeval (void)>     ++{>     ++  long a[5];>     ++  long 
(*p)[__lengthof__ (a)];>     ++>     ++  p = &a;>     ++  assert (__lengthof__ 
(*p++) == 5);>     ++  assert (p == &a);>     ++}>     ++>     ++void>     
++matrix_zero (void)>     ++{>     ++  int i;>     ++>     ++  assert 
(__lengthof__ (int [0][4]) == 0);>     ++  i = 3;>     ++  assert (__lengthof__ 
(int [0][i]) == 0);>     ++}>     ++>     ++void>     ++matrix_fixed (void)>    
 ++{>     ++  int i;>     ++>     ++  assert (__lengthof__ (int [7][4]) == 7);> 
    ++  i = 3;>     ++  assert (__lengthof__ (int [7][i]) == 7);>     ++}>     
++>     ++void>     ++matrix_vla (void)>     ++{>     ++  int i, j;>     ++>    
 ++  i = 7;>     ++  assert (__lengthof__ (int [i++][4]) == 7);>     ++  assert 
(i == 7 + 1);>     ++>     ++  i = 9;>     ++  j = 3;>     ++  assert 
(__lengthof__ (int [i++][j]) == 9);>     ++  assert (i == 9 + 1);>     ++}>     
++>     ++int>     ++main (void)>     ++{>     ++  array ();>     ++  vla ();>  
   ++  member ();>     ++  vla_eval ();>     ++  inner_vla_noeval ();>     ++  
array_noeval ();>     ++  matrix_zero ();>     ++  matrix_fixed ();>     ++  
matrix_vla ();>     ++}> 4:  9a691f7f208 < -:  ----------- testsuite: Add tests 
for __lengthof__> -- > 2.45.2> -- <https://www.alejandro-colomar.es/>

Reply via email to