Hi Martin,

On Tue, Aug 06, 2024 at 03:37:13PM GMT, Martin Uecker wrote:
> Am Dienstag, dem 06.08.2024 um 14:22 +0200 schrieb Alejandro Colomar:
> > Hi!
> > 
> > -  The tests seem to work as expected if I compile them manually, and
> >    run (the one that should be run) as a normal program.  The one that
> >    should not be run also gives the expected diagnostics.
> >    Can anyone give advice of why it's not running well under the test
> >    suite?
> 
> What is the output?  You get an additional warning / error.

        $ /opt/local/gnu/gcc/lengthof/bin/gcc 
gcc/testsuite/gcc.dg/lengthof-compile.c 
        gcc/testsuite/gcc.dg/lengthof-compile.c: In function ‘incomplete’:
        gcc/testsuite/gcc.dg/lengthof-compile.c:10:19: error: invalid 
application of ‘lengthof’ to incomplete type ‘int[]’
           10 |   n = __lengthof__(x);  /* { dg-error "incomplete" } */
              |                   ^
        gcc/testsuite/gcc.dg/lengthof-compile.c:14:19: error: invalid 
application of ‘lengthof’ to type ‘int *’
           14 |   n = __lengthof__(p);  /* { dg-error "invalid" } */
              |                   ^
        gcc/testsuite/gcc.dg/lengthof-compile.c: In function ‘fam’:
        gcc/testsuite/gcc.dg/lengthof-compile.c:26:19: error: invalid 
application of ‘lengthof’ to incomplete type ‘int[]’
           26 |   n = __lengthof__(s.fam); /* { dg-error "incomplete" } */
              |                   ^
        gcc/testsuite/gcc.dg/lengthof-compile.c: In function ‘func’:
        gcc/testsuite/gcc.dg/lengthof-compile.c:41:20: error: passing argument 
3 of ‘fix_fix’ from incompatible pointer type [-Wincompatible-pointer-types]
           41 |   fix_fix(5, &c35, &i5); /* { dg-error 
"incompatible-pointer-types" } */
              |                    ^~~
              |                    |
              |                    int (*)[5]
        gcc/testsuite/gcc.dg/lengthof-compile.c:29:44: note: expected ‘int 
(*)[3]’ but argument is of type ‘int (*)[5]’
           29 | void fix_fix(int i, char (*a)[3][5], int 
(*x)[__lengthof__(*a)]);
              |                                      ~~~~~~^~~~~~~~~~~~~~~~~~~~
        gcc/testsuite/gcc.dg/lengthof-compile.c:44:20: error: passing argument 
3 of ‘fix_var’ from incompatible pointer type [-Wincompatible-pointer-types]
           44 |   fix_var(5, &c35, &i5); /* { dg-error 
"incompatible-pointer-types" } */
              |                    ^~~
              |                    |
              |                    int (*)[5]
        gcc/testsuite/gcc.dg/lengthof-compile.c:30:44: note: expected ‘int 
(*)[3]’ but argument is of type ‘int (*)[5]’
           30 | void fix_var(int i, char (*a)[3][i], int 
(*x)[__lengthof__(*a)]);
              |                                      ~~~~~~^~~~~~~~~~~~~~~~~~~~
        gcc/testsuite/gcc.dg/lengthof-compile.c:47:20: error: passing argument 
3 of ‘fix_uns’ from incompatible pointer type [-Wincompatible-pointer-types]
           47 |   fix_uns(5, &c35, &i5); /* { dg-error 
"incompatible-pointer-types" } */
              |                    ^~~
              |                    |
              |                    int (*)[5]
        gcc/testsuite/gcc.dg/lengthof-compile.c:31:44: note: expected ‘int 
(*)[3]’ but argument is of type ‘int (*)[5]’
           31 | void fix_uns(int i, char (*a)[3][*], int 
(*x)[__lengthof__(*a)]);
              |                                      ~~~~~~^~~~~~~~~~~~~~~~~~~~
        $ /opt/local/gnu/gcc/lengthof/bin/gcc 
gcc/testsuite/gcc.dg/lengthof-compile.c |& grep ' error: '
        gcc/testsuite/gcc.dg/lengthof-compile.c:10:19: error: invalid 
application of ‘lengthof’ to incomplete type ‘int[]’
        gcc/testsuite/gcc.dg/lengthof-compile.c:14:19: error: invalid 
application of ‘lengthof’ to type ‘int *’
        gcc/testsuite/gcc.dg/lengthof-compile.c:26:19: error: invalid 
application of ‘lengthof’ to incomplete type ‘int[]’
        gcc/testsuite/gcc.dg/lengthof-compile.c:41:20: error: passing argument 
3 of ‘fix_fix’ from incompatible pointer type [-Wincompatible-pointer-types]
        gcc/testsuite/gcc.dg/lengthof-compile.c:44:20: error: passing argument 
3 of ‘fix_var’ from incompatible pointer type [-Wincompatible-pointer-types]
        gcc/testsuite/gcc.dg/lengthof-compile.c:47:20: error: passing argument 
3 of ‘fix_uns’ from incompatible pointer type [-Wincompatible-pointer-types]
        $ /opt/local/gnu/gcc/lengthof/bin/gcc 
gcc/testsuite/gcc.dg/lengthof-compile.c |& grep ' error: ' | wc -l
        6

I count 6, which is what I expect:

        $ grep dg-error gcc/testsuite/gcc.dg/lengthof-compile.c
          n = __lengthof__(x);  /* { dg-error "incomplete" } */
          n = __lengthof__(p);  /* { dg-error "invalid" } */
          n = __lengthof__(s.fam); /* { dg-error "incomplete" } */
          fix_fix(5, &c35, &i5); /* { dg-error "incompatible-pointer-types" } */
          fix_var(5, &c35, &i5); /* { dg-error "incompatible-pointer-types" } */
          fix_uns(5, &c35, &i5); /* { dg-error "incompatible-pointer-types" } */
        $ grep dg-error gcc/testsuite/gcc.dg/lengthof-compile.c | wc -l
        6

When running `make check -j24 -Orecurse |& tee log`, this is what I see:

            FAIL: gcc.dg/lengthof-compile.c (test for excess errors)

Is there any way to see more details?

> > -  I don't like the fact that [*][n] is internally implemented exactly
> >    like [0][n], which makes them indistinguishable.  All other cases of
> >    [0] return a constent expression of value 0, but [0][n] must return a
> >    variable 0, to keep support for [*][n].
> >    Could you please change the way [*][n] (and thus [*]) is represented
> >    internally so that it can be differentiated from [0]?
> >    Do you have in mind any other way that would be a viable
> >    implementation of [*] that would allow distinguishing [0][n] and
> >    [*][n]?  Maybe making it to have one node instead of zero and mark
> >    that node specially?
> 
> The C++ frontend encodes zero-sized arrays using a range of [0,-1]. 
> I have a half-finished patch which implements this for the C FE.

Thanks!  I guess your patch will be merged before mine, so please ping
me when that happens so I update mine for it.

BTW, do you allow me to use Co-developed-by: you?

Have a lovely day!
Alex

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

Attachment: signature.asc
Description: PGP signature

Reply via email to