Linux 4.8.3
[linux/fpc-iii.git] / scripts / coccinelle / misc / array_size.cocci
blob6ec05710b0179463101feddc99498196f740255a
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
13 virtual patch
14 virtual context
15 virtual org
16 virtual report
18 @i@
21 #include <linux/kernel.h>
23 //----------------------------------------------------------
24 //  For context mode
25 //----------------------------------------------------------
27 @depends on i&&context@
28 type T;
29 T[] E;
32 * (sizeof(E)/sizeof(*E))
34 * (sizeof(E)/sizeof(E[...]))
36 * (sizeof(E)/sizeof(T))
39 //----------------------------------------------------------
40 //  For patch mode
41 //----------------------------------------------------------
43 @depends on i&&patch@
44 type T;
45 T[] E;
48 - (sizeof(E)/sizeof(*E))
49 + ARRAY_SIZE(E)
51 - (sizeof(E)/sizeof(E[...]))
52 + ARRAY_SIZE(E)
54 - (sizeof(E)/sizeof(T))
55 + ARRAY_SIZE(E)
58 //----------------------------------------------------------
59 //  For org and report mode
60 //----------------------------------------------------------
62 @r depends on (org || report)@
63 type T;
64 T[] E;
65 position p;
68  (sizeof(E)@p /sizeof(*E))
70  (sizeof(E)@p /sizeof(E[...]))
72  (sizeof(E)@p /sizeof(T))
75 @script:python depends on i&&org@
76 p << r.p;
79 coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE")
81 @script:python depends on i&&report@
82 p << r.p;
85 msg="WARNING: Use ARRAY_SIZE"
86 coccilib.report.print_report(p[0], msg)