On Sun, 2019-10-20 at 21:52 +0200, Julia Lawall wrote: > On Sun, 20 Oct 2019, Joe Perches wrote: [] > > There's probably a generic cocci mechanism to check function > > prototypes and then remove uses of unnecessary void pointer casts > > in function calls. I'm not going to try to figure out that syntax. > > With the --recursive-includes option, perhaps: > > @r@ > identifier f; > parameter list[n] ps; > type T; > identifier i; > @@ > > T f(ps, void *i, ...); > > @@ > expression e; > identifier r.f; > expression list[r.n] es; > @@ > > f(es, > - (void *)(e) > + e > ,...) > > This of course only works for functions that have prototypes, and not for > macros. It will also run slowly.
You are not kidding about slow, but it doesn't seem to work for mem<foo>, maybe because system includes aren't analyzed. Single file processing time on an XPS13 averages more than 100 seconds per file. Also: expression e; could probably be better as: type T; T *p; as some of the expressions cast to void are int or size_t and it's probably better to restrict the conversions to just pointer or array types.