Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / scripts / coccinelle / misc / array_size.cocci
1 /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
2 ///
3 //# This makes an effort to find cases where ARRAY_SIZE can be used such as
4 //# where there is a division of sizeof the array by the sizeof its first
5 //# element or by any indexed element or the element type. It replaces the
6 //# division of the two sizeofs by ARRAY_SIZE.
7 //
8 // Confidence: High
9 // Copyright: (C) 2014 Himangi Saraogi.  GPLv2.
10 // Comments:
11 // Options: --no-includes --include-headers
12
13 virtual patch
14 virtual context
15 virtual org
16 virtual report
17
18 @i@
19 @@
20
21 #include <linux/kernel.h>
22
23 //----------------------------------------------------------
24 //  For context mode
25 //----------------------------------------------------------
26
27 @depends on i&&context@
28 type T;
29 T[] E;
30 @@
31 (
32 * (sizeof(E)/sizeof(*E))
33 |
34 * (sizeof(E)/sizeof(E[...]))
35 |
36 * (sizeof(E)/sizeof(T))
37 )
38
39 //----------------------------------------------------------
40 //  For patch mode
41 //----------------------------------------------------------
42
43 @depends on i&&patch@
44 type T;
45 T[] E;
46 @@
47 (
48 - (sizeof(E)/sizeof(*E))
49 + ARRAY_SIZE(E)
50 |
51 - (sizeof(E)/sizeof(E[...]))
52 + ARRAY_SIZE(E)
53 |
54 - (sizeof(E)/sizeof(T))
55 + ARRAY_SIZE(E)
56 )
57
58 //----------------------------------------------------------
59 //  For org and report mode
60 //----------------------------------------------------------
61
62 @r@
63 type T;
64 T[] E;
65 position p;
66 @@
67 (
68  (sizeof(E)@p /sizeof(*E))
69 |
70  (sizeof(E)@p /sizeof(E[...]))
71 |
72  (sizeof(E)@p /sizeof(T))
73 )
74
75 @script:python depends on i&&org@
76 p << r.p;
77 @@
78
79 coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE")
80
81 @script:python depends on i&&report@
82 p << r.p;
83 @@
84
85 msg="WARNING: Use ARRAY_SIZE"
86 coccilib.report.print_report(p[0], msg)
87