123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // SPDX-License-Identifier: GPL-2.0-only
- ///
- /// Zero-length and one-element arrays are deprecated, see
- /// Documentation/process/deprecated.rst
- /// Flexible-array members should be used instead.
- ///
- //
- // Confidence: High
- // Copyright: (C) 2020 Denis Efremov ISPRAS.
- // Comments:
- // Options: --no-includes --include-headers
- virtual context
- virtual report
- virtual org
- virtual patch
- @initialize:python@
- @@
- def relevant(positions):
- for p in positions:
- if "uapi" in p.file:
- return False
- return True
- @r depends on !patch@
- identifier name, array;
- type T;
- position p : script:python() { relevant(p) };
- @@
- (
- struct name {
- ...
- * T array@p[\(0\|1\)];
- };
- |
- struct {
- ...
- * T array@p[\(0\|1\)];
- };
- |
- union name {
- ...
- * T array@p[\(0\|1\)];
- };
- |
- union {
- ...
- * T array@p[\(0\|1\)];
- };
- )
- @only_field depends on patch@
- identifier name, array;
- type T;
- position q;
- @@
- (
- struct name {@q
- T array[0];
- };
- |
- struct {@q
- T array[0];
- };
- )
- @depends on patch@
- identifier name, array;
- type T;
- position p : script:python() { relevant(p) };
- // position @q with rule "only_field" simplifies
- // handling of bitfields, arrays, etc.
- position q != only_field.q;
- @@
- (
- struct name {@q
- ...
- T array@p[
- - 0
- ];
- };
- |
- struct {@q
- ...
- T array@p[
- - 0
- ];
- };
- )
- @script: python depends on report@
- p << r.p;
- @@
- msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
- coccilib.report.print_report(p[0], msg)
- @script: python depends on org@
- p << r.p;
- @@
- msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
- coccilib.org.print_todo(p[0], msg)
|