Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

coccinelle: misc: add swap script

Check for opencoded swap() implementation.

Signed-off-by: Denis Efremov <efremov@linux.com>
Signed-off-by: Julia Lawall <julia.lawall@inria.fr>

authored by

Denis Efremov and committed by
Julia Lawall
7845daa8 cb62732d

+122
+122
scripts/coccinelle/misc/swap.cocci
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /// 3 + /// Check for opencoded swap() implementation. 4 + /// 5 + // Confidence: High 6 + // Copyright: (C) 2021 Denis Efremov ISPRAS 7 + // Options: --no-includes --include-headers 8 + // 9 + // Keywords: swap 10 + // 11 + 12 + virtual patch 13 + virtual org 14 + virtual report 15 + virtual context 16 + 17 + @rvar depends on !patch@ 18 + identifier tmp; 19 + expression a, b; 20 + type T; 21 + position p; 22 + @@ 23 + 24 + ( 25 + * T tmp; 26 + | 27 + * T tmp = 0; 28 + | 29 + * T *tmp = NULL; 30 + ) 31 + ... when != tmp 32 + * tmp = a; 33 + * a = b;@p 34 + * b = tmp; 35 + ... when != tmp 36 + 37 + @r depends on !patch@ 38 + identifier tmp; 39 + expression a, b; 40 + position p != rvar.p; 41 + @@ 42 + 43 + * tmp = a; 44 + * a = b;@p 45 + * b = tmp; 46 + 47 + @rpvar depends on patch@ 48 + identifier tmp; 49 + expression a, b; 50 + type T; 51 + @@ 52 + 53 + ( 54 + - T tmp; 55 + | 56 + - T tmp = 0; 57 + | 58 + - T *tmp = NULL; 59 + ) 60 + ... when != tmp 61 + - tmp = a; 62 + - a = b; 63 + - b = tmp 64 + + swap(a, b) 65 + ; 66 + ... when != tmp 67 + 68 + @rp depends on patch@ 69 + identifier tmp; 70 + expression a, b; 71 + @@ 72 + 73 + - tmp = a; 74 + - a = b; 75 + - b = tmp 76 + + swap(a, b) 77 + ; 78 + 79 + @depends on patch && (rpvar || rp)@ 80 + @@ 81 + 82 + ( 83 + for (...;...;...) 84 + - { 85 + swap(...); 86 + - } 87 + | 88 + while (...) 89 + - { 90 + swap(...); 91 + - } 92 + | 93 + if (...) 94 + - { 95 + swap(...); 96 + - } 97 + ) 98 + 99 + 100 + @script:python depends on report@ 101 + p << r.p; 102 + @@ 103 + 104 + coccilib.report.print_report(p[0], "WARNING opportunity for swap()") 105 + 106 + @script:python depends on org@ 107 + p << r.p; 108 + @@ 109 + 110 + coccilib.org.print_todo(p[0], "WARNING opportunity for swap()") 111 + 112 + @script:python depends on report@ 113 + p << rvar.p; 114 + @@ 115 + 116 + coccilib.report.print_report(p[0], "WARNING opportunity for swap()") 117 + 118 + @script:python depends on org@ 119 + p << rvar.p; 120 + @@ 121 + 122 + coccilib.org.print_todo(p[0], "WARNING opportunity for swap()")