xref: /linux/scripts/coccinelle/misc/swap.cocci (revision a4eb44a6435d6d8f9e642407a4a06f65eb90ca04)
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