Merge tag 'afs-fixes-04012021' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowe...
[linux-2.6-microblaze.git] / scripts / coccinelle / misc / flexible_array.cocci
1 // SPDX-License-Identifier: GPL-2.0-only
2 ///
3 /// Zero-length and one-element arrays are deprecated, see
4 /// Documentation/process/deprecated.rst
5 /// Flexible-array members should be used instead.
6 ///
7 //
8 // Confidence: High
9 // Copyright: (C) 2020 Denis Efremov ISPRAS.
10 // Comments:
11 // Options: --no-includes --include-headers
12
13 virtual context
14 virtual report
15 virtual org
16 virtual patch
17
18 @initialize:python@
19 @@
20 def relevant(positions):
21     for p in positions:
22         if "uapi" in p.file:
23              return False
24     return True
25
26 @r depends on !patch@
27 identifier name, array;
28 type T;
29 position p : script:python() { relevant(p) };
30 @@
31
32 (
33   struct name {
34     ...
35 *   T array@p[\(0\|1\)];
36   };
37 |
38   struct {
39     ...
40 *   T array@p[\(0\|1\)];
41   };
42 |
43   union name {
44     ...
45 *   T array@p[\(0\|1\)];
46   };
47 |
48   union {
49     ...
50 *   T array@p[\(0\|1\)];
51   };
52 )
53
54 @depends on patch@
55 identifier name, array;
56 type T;
57 position p : script:python() { relevant(p) };
58 @@
59
60 (
61   struct name {
62     ...
63     T array@p[
64 -       0
65     ];
66   };
67 |
68   struct {
69     ...
70     T array@p[
71 -       0
72     ];
73   };
74 )
75
76 @script: python depends on report@
77 p << r.p;
78 @@
79
80 msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
81 coccilib.report.print_report(p[0], msg)
82
83 @script: python depends on org@
84 p << r.p;
85 @@
86
87 msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
88 coccilib.org.print_todo(p[0], msg)