coccinelle: misc: restrict patch mode in flexible_array.cocci
[linux-2.6-block.git] / scripts / coccinelle / misc / flexible_array.cocci
CommitLineData
7b36c139
DE
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
13virtual context
14virtual report
15virtual org
16virtual patch
17
18@initialize:python@
19@@
20def 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@
27identifier name, array;
28type T;
29position 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
3afb532b
DE
54@only_field depends on patch@
55identifier name, array;
56type T;
57position q;
58@@
59
60(
61 struct name {@q
62 T array[0];
63 };
64|
65 struct {@q
66 T array[0];
67 };
68)
69
7b36c139
DE
70@depends on patch@
71identifier name, array;
72type T;
73position p : script:python() { relevant(p) };
3afb532b
DE
74// position @q with rule "only_field" simplifies
75// handling of bitfields, arrays, etc.
76position q != only_field.q;
7b36c139
DE
77@@
78
79(
3afb532b 80 struct name {@q
7b36c139
DE
81 ...
82 T array@p[
83- 0
84 ];
85 };
86|
3afb532b 87 struct {@q
7b36c139
DE
88 ...
89 T array@p[
90- 0
91 ];
92 };
93)
94
95@script: python depends on report@
96p << r.p;
97@@
98
99msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
100coccilib.report.print_report(p[0], msg)
101
102@script: python depends on org@
103p << r.p;
104@@
105
106msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
107coccilib.org.print_todo(p[0], msg)