Skip to content

Commit f53156f

Browse files
rscharfegitster
authored andcommitted
cocci: avoid normalization rules for memcpy
Some of the rules for using COPY_ARRAY instead of memcpy with sizeof are intended to reduce the number of sizeof variants to deal with. They can have unintended side effects if only they match, but not the one for the COPY_ARRAY conversion at the end. Avoid these side effects by instead using a self-contained rule for each combination of array and pointer for source and destination which lists all sizeof variants inline. This lets "make contrib/coccinelle/array.cocci.patch" take 15% longer on my machine, but gives peace of mind that no incomplete transformation will be generated. Suggested-by: Junio C Hamano <[email protected]> Signed-off-by: René Scharfe <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent dc8c8de commit f53156f

File tree

1 file changed

+40
-42
lines changed

1 file changed

+40
-42
lines changed

contrib/coccinelle/array.cocci

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,58 @@
11
@@
2-
expression dst, src, n, E;
2+
type T;
3+
T *dst_ptr;
4+
T *src_ptr;
5+
expression n;
36
@@
4-
memcpy(dst, src, n * sizeof(
5-
- E[...]
6-
+ *(E)
7-
))
7+
- memcpy(dst_ptr, src_ptr, (n) * \( sizeof(T)
8+
- \| sizeof(*(dst_ptr))
9+
- \| sizeof(*(src_ptr))
10+
- \| sizeof(dst_ptr[...])
11+
- \| sizeof(src_ptr[...])
12+
- \) )
13+
+ COPY_ARRAY(dst_ptr, src_ptr, n)
814

915
@@
1016
type T;
11-
T *ptr;
12-
T[] arr;
13-
expression E, n;
17+
T *dst_ptr;
18+
T[] src_arr;
19+
expression n;
1420
@@
15-
(
16-
memcpy(ptr, E,
17-
- n * sizeof(*(ptr))
18-
+ n * sizeof(T)
19-
)
20-
|
21-
memcpy(arr, E,
22-
- n * sizeof(*(arr))
23-
+ n * sizeof(T)
24-
)
25-
|
26-
memcpy(E, ptr,
27-
- n * sizeof(*(ptr))
28-
+ n * sizeof(T)
29-
)
30-
|
31-
memcpy(E, arr,
32-
- n * sizeof(*(arr))
33-
+ n * sizeof(T)
34-
)
35-
)
21+
- memcpy(dst_ptr, src_arr, (n) * \( sizeof(T)
22+
- \| sizeof(*(dst_ptr))
23+
- \| sizeof(*(src_arr))
24+
- \| sizeof(dst_ptr[...])
25+
- \| sizeof(src_arr[...])
26+
- \) )
27+
+ COPY_ARRAY(dst_ptr, src_arr, n)
3628

3729
@@
3830
type T;
39-
T *dst_ptr;
31+
T[] dst_arr;
4032
T *src_ptr;
33+
expression n;
34+
@@
35+
- memcpy(dst_arr, src_ptr, (n) * \( sizeof(T)
36+
- \| sizeof(*(dst_arr))
37+
- \| sizeof(*(src_ptr))
38+
- \| sizeof(dst_arr[...])
39+
- \| sizeof(src_ptr[...])
40+
- \) )
41+
+ COPY_ARRAY(dst_arr, src_ptr, n)
42+
43+
@@
44+
type T;
4145
T[] dst_arr;
4246
T[] src_arr;
4347
expression n;
4448
@@
45-
(
46-
- memcpy(dst_ptr, src_ptr, (n) * sizeof(T))
47-
+ COPY_ARRAY(dst_ptr, src_ptr, n)
48-
|
49-
- memcpy(dst_ptr, src_arr, (n) * sizeof(T))
50-
+ COPY_ARRAY(dst_ptr, src_arr, n)
51-
|
52-
- memcpy(dst_arr, src_ptr, (n) * sizeof(T))
53-
+ COPY_ARRAY(dst_arr, src_ptr, n)
54-
|
55-
- memcpy(dst_arr, src_arr, (n) * sizeof(T))
49+
- memcpy(dst_arr, src_arr, (n) * \( sizeof(T)
50+
- \| sizeof(*(dst_arr))
51+
- \| sizeof(*(src_arr))
52+
- \| sizeof(dst_arr[...])
53+
- \| sizeof(src_arr[...])
54+
- \) )
5655
+ COPY_ARRAY(dst_arr, src_arr, n)
57-
)
5856

5957
@@
6058
type T;

0 commit comments

Comments
 (0)