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()")
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.