Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
  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@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
 70@depends on patch@
 71identifier name, array;
 72type T;
 73position p : script:python() { relevant(p) };
 74// position @q with rule "only_field" simplifies
 75// handling of bitfields, arrays, etc.
 76position q != only_field.q;
 77@@
 78
 79(
 80  struct name {@q
 81    ...
 82    T array@p[
 83-       0
 84    ];
 85  };
 86|
 87  struct {@q
 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)