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 13 virtual context 14 virtual report 15 virtual org 16 virtual patch 17 18 @initialize:python@ 19 @@ 20 def 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@ 27 identifier name, array; 28 type T; 29 position 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@ 55 identifier name, array; 56 type T; 57 position 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@ 71 identifier name, array; 72 type T; 73 position p : script:python() { relevant(p) }; 74 // position @q with rule "only_field" simplifies 75 // handling of bitfields, arrays, etc. 76 position 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@ 96 p << r.p; 97 @@ 98 99 msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)" 100 coccilib.report.print_report(p[0], msg) 101 102 @script: python depends on org@ 103 p << r.p; 104 @@ 105 106 msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)" 107 coccilib.org.print_todo(p[0], msg)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.