Am Dienstag, dem 06.08.2024 um 16:12 +0200 schrieb Alejandro Colomar: > 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?
See gcc/testsuite/gcc/gcc.log There are also *.sum files which you can diff against a build without your patch to see whether there are any regressions. > > > > - 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. Not sure about this... > > BTW, do you allow me to use Co-developed-by: you? ok, Martin > > Have a lovely day! > Alex >