coccinelle: misc: add minmax script
[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
54@depends on patch@
55identifier name, array;
56type T;
57position 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@
77p << r.p;
78@@
79
80msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
81coccilib.report.print_report(p[0], msg)
82
83@script: python depends on org@
84p << r.p;
85@@
86
87msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
88coccilib.org.print_todo(p[0], msg)