Merge tag 'block-5.11-2021-01-10' of git://git.kernel.dk/linux-block
[linux/fpc-iii.git] / scripts / coccinelle / misc / flexible_array.cocci
blob947fbaff82a93d2e18753b2118e4614a5b35efec
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
13 virtual context
14 virtual report
15 virtual org
16 virtual patch
18 @initialize:python@
20 def relevant(positions):
21     for p in positions:
22         if "uapi" in p.file:
23              return False
24     return True
26 @r depends on !patch@
27 identifier name, array;
28 type T;
29 position p : script:python() { relevant(p) };
33   struct name {
34     ...
35 *   T array@p[\(0\|1\)];
36   };
38   struct {
39     ...
40 *   T array@p[\(0\|1\)];
41   };
43   union name {
44     ...
45 *   T array@p[\(0\|1\)];
46   };
48   union {
49     ...
50 *   T array@p[\(0\|1\)];
51   };
54 @depends on patch@
55 identifier name, array;
56 type T;
57 position p : script:python() { relevant(p) };
61   struct name {
62     ...
63     T array@p[
64 -       0
65     ];
66   };
68   struct {
69     ...
70     T array@p[
71 -       0
72     ];
73   };
76 @script: python depends on report@
77 p << r.p;
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)
83 @script: python depends on org@
84 p << r.p;
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)