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 12virtual patch 13virtual org 14virtual report 15virtual context 16 17@rvar depends on !patch@ 18identifier tmp; 19expression a, b; 20type T; 21position 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@ 38identifier tmp; 39expression a, b; 40position p != rvar.p; 41@@ 42 43* tmp = a; 44* a = b;@p 45* b = tmp; 46 47@rpvar depends on patch@ 48identifier tmp; 49expression a, b; 50type 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@ 69identifier tmp; 70expression 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@ 101p << r.p; 102@@ 103 104coccilib.report.print_report(p[0], "WARNING opportunity for swap()") 105 106@script:python depends on org@ 107p << r.p; 108@@ 109 110coccilib.org.print_todo(p[0], "WARNING opportunity for swap()") 111 112@script:python depends on report@ 113p << rvar.p; 114@@ 115 116coccilib.report.print_report(p[0], "WARNING opportunity for swap()") 117 118@script:python depends on org@ 119p << rvar.p; 120@@ 121 122coccilib.org.print_todo(p[0], "WARNING opportunity for swap()") 123