Commit | Line | Data |
---|---|---|
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 | ||
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 | ||
3afb532b DE |
54 | @only_field depends on patch@ |
55 | identifier name, array; | |
56 | type T; | |
57 | position 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@ |
71 | identifier name, array; | |
72 | type T; | |
73 | position p : script:python() { relevant(p) }; | |
3afb532b DE |
74 | // position @q with rule "only_field" simplifies |
75 | // handling of bitfields, arrays, etc. | |
76 | position 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@ | |
96 | p << r.p; | |
97 | @@ | |
98 | ||
99 | msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)" | |
100 | coccilib.report.print_report(p[0], msg) | |
101 | ||
102 | @script: python depends on org@ | |
103 | p << r.p; | |
104 | @@ | |
105 | ||
106 | msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)" | |
107 | coccilib.org.print_todo(p[0], msg) |