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