Hi,The address david.br...@hesbynett.no 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 browndavid.br...@hesbynett.no
-------- Original message --------From: Alejandro Colomar <a...@kernel.org> 
Date: 07/08/2024  01:26  (GMT+01:00) To: gcc-patches@gcc.gnu.org Cc: Martin 
Uecker <uec...@tugraz.at>, Xavier Del Campo Romero <xavi....@tutanota.com>, 
Joseph Myers <josmy...@redhat.com>, Gabriel Ravier <gabrav...@gmail.com>, Jakub 
Jelinek <ja...@redhat.com>, Kees Cook <keesc...@chromium.org>, Qing Zhao 
<qing.z...@oracle.com>, Jens Gustedt <jens.gust...@inria.fr>, David Brown 
<david.br...@hesbynett.no>, Florian Weimer <fwei...@redhat.com>, Andreas Schwab 
<sch...@linux-m68k.org> Subject: Re: [PATCH v5 0/3] c: Add __lengthof__ 
operator <david.br...@hesbynett.no> 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 <a...@kernel.org>>      > 3:  e2dbfc43b14 ! 3:  af05d01e68d 
c: Add __lengthof__() operator (n2529)>     @@ Metadata>      Author: Alejandro 
Colomar <a...@kernel.org>>      >       ## 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/m8s4oqy--...@tutanota.com/T/>>     -    
Suggested-by: Xavier Del Campo Romero <xavi....@tutanota.com>>     -    
Co-developed-by: Martin Uecker <uec...@tugraz.at>>     -    Cc: Gabriel Ravier 
<gabrav...@gmail.com>>          Cc: Joseph Myers <josmy...@redhat.com>>     +   
 Cc: Gabriel Ravier <gabrav...@gmail.com>>          Cc: Jakub Jelinek 
<ja...@redhat.com>>          Cc: Kees Cook <keesc...@chromium.org>>          
Cc: Qing Zhao <qing.z...@oracle.com>>          Cc: Jens Gustedt 
<jens.gust...@inria.fr>>     +    Cc: David Brown <david.br...@hesbynett.no>>   
  +    Cc: Florian Weimer <fwei...@redhat.com>>     +    Cc: Andreas Schwab 
<sch...@linux-m68k.org>>     +>     +    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/m8s4oqy--...@tutanota.com/T/>     
+    Suggested-by: Xavier Del Campo Romero <xavi....@tutanota.com>>     +    
Co-developed-by: Martin Uecker <uec...@tugraz.at>>          Signed-off-by: 
Alejandro Colomar <a...@kernel.org>>      >       ## 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