coccinelle: use COPY_ARRAY for copying arrays
authorRené Scharfe <l.s.r@web.de>
Sat, 15 Jun 2019 18:32:58 +0000 (20:32 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 18 Jun 2019 01:14:59 +0000 (18:14 -0700)
commit177fbab747da4f58cb2a8ce010b3515c86dd67c9
treef3936a6b4db9c110bef4bb4a28131ec6de06aa25
parentb697d92f56511e804b8ba20ccbe7bdc85dc66810
coccinelle: use COPY_ARRAY for copying arrays

The current semantic patch for COPY_ARRAY transforms memcpy(3) calls on
pointers, but Coccinelle distinguishes them from arrays.  It already
contains three rules to handle the options for sizeof (i.e. source,
destination and type), and handling arrays as source and destination
would require four times as many rules if we enumerated all cases.

We also don't handle array subscripts, and supporting that would
increase the number of rules by another factor of four.  (An isomorphism
telling Coccinelle that "sizeof x[...]" is equivalent to "sizeof *x"
would be nice..)

Support arrays and array subscripts, but keep the number of rules down
by adding normalization steps: First turn array subscripts into
derefences, then determine the types of expressions used with sizeof and
replace them with these types, and then convert the different possible
combinations of arrays and pointers with memcpy(3) to COPY_ARRAY.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/coccinelle/array.cocci