Hi Martin, On Fri, Jul 05, 2024 at 05:02:15PM GMT, Martin Uecker wrote: > > But when the thing gets non-trivial, as in strtol(3), GCC misses the > > -Wrestrict diagnostic, as reported in > > <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112833>. > > > > Let's write a reproducer by altering the dumb.c program from above, with > > just another reference: > > > > int > > dumb2(int *restrict a, int *restrict *restrict ap) > > { > > // We don't access the objects > > return a == *ap; > > } > > > > int > > main(void) > > { > > int x = 3; > > int *xp = &x; > > > > return dumb2(&x, &xp); > > } > > > > GCC doesn't report anything bad here, even though it's basically the > > same as the program from above: > > > > $ cc -Wall -Wextra dumb2.c > > $ > > strtol does have a "char * restrict * restrict" though, so the > situation is different. A "char **" and a "const char *" > shouldn't alias anyway. Pedantically, it is actually declared as 'char **restrict' (the inner one is not declared as restrict, even though it will be restricted, since there are no other unrestricted pointers). I've written functions that more closely resemble strtol(3), to show that in the end they all share the same issue regarding const-ness: $ cat d.c int d(const char *restrict ca, char *restrict a) { return ca > a; } int main(void) { char x = 3; char *xp = &x; d(xp, xp); } $ cc -Wall -Wextra d.c d.c: In function ‘main’: d.c:10:9: warning: passing argument 2 to ‘restrict’-qualified parameter aliases with argument 1 [-Wrestrict] 10 | d(xp, xp); | ^ This trivial program causes a diagnostic. (Although I think the '>' should also cause a diagnostic!!) Let's add a reference, to resemble strtol(3): $ cat d2.c int d2(const char *restrict ca, char *restrict *restrict ap) { return ca > *ap; } int main(void) { char x = 3; char *xp = &x; d2(xp, &xp); } $ cc -Wall -Wextra d2.c $ Why does this not cause a -Wrestrict diagnostic, while d.c does? How are these programs any different regarding pointer restrict-ness? > > Well, I don't know how to report that defect to WG14. If you help me, > > I'll be pleased to do so. Do they have a public mailing list or > > anything like that? > > One can submit clarification or change requests: > > https://www.open-std.org/jtc1/sc22/wg14/www/contributing.html Thanks! Will do. Anyway, I think this should be discussed in glibc/gcc in parallel, since it's clearly a missed diagnostic, and possibly a dangerous use of restrict if the compiler does any assumptions that shouldn't be done. Have a lovely day! Alex -- <https://www.alejandro-colomar.es/>
Attachment:
signature.asc
Description: PGP signature