| // 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) |