forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
1.5 KiB
122 lines
1.5 KiB
// SPDX-License-Identifier: GPL-2.0-only |
|
/// |
|
/// Check for opencoded swap() implementation. |
|
/// |
|
// Confidence: High |
|
// Copyright: (C) 2021 Denis Efremov ISPRAS |
|
// Options: --no-includes --include-headers |
|
// |
|
// Keywords: swap |
|
// |
|
|
|
virtual patch |
|
virtual org |
|
virtual report |
|
virtual context |
|
|
|
@rvar depends on !patch@ |
|
identifier tmp; |
|
expression a, b; |
|
type T; |
|
position p; |
|
@@ |
|
|
|
( |
|
* T tmp; |
|
| |
|
* T tmp = 0; |
|
| |
|
* T *tmp = NULL; |
|
) |
|
... when != tmp |
|
* tmp = a; |
|
* a = b;@p |
|
* b = tmp; |
|
... when != tmp |
|
|
|
@r depends on !patch@ |
|
identifier tmp; |
|
expression a, b; |
|
position p != rvar.p; |
|
@@ |
|
|
|
* tmp = a; |
|
* a = b;@p |
|
* b = tmp; |
|
|
|
@rpvar depends on patch@ |
|
identifier tmp; |
|
expression a, b; |
|
type T; |
|
@@ |
|
|
|
( |
|
- T tmp; |
|
| |
|
- T tmp = 0; |
|
| |
|
- T *tmp = NULL; |
|
) |
|
... when != tmp |
|
- tmp = a; |
|
- a = b; |
|
- b = tmp |
|
+ swap(a, b) |
|
; |
|
... when != tmp |
|
|
|
@rp depends on patch@ |
|
identifier tmp; |
|
expression a, b; |
|
@@ |
|
|
|
- tmp = a; |
|
- a = b; |
|
- b = tmp |
|
+ swap(a, b) |
|
; |
|
|
|
@depends on patch && (rpvar || rp)@ |
|
@@ |
|
|
|
( |
|
for (...;...;...) |
|
- { |
|
swap(...); |
|
- } |
|
| |
|
while (...) |
|
- { |
|
swap(...); |
|
- } |
|
| |
|
if (...) |
|
- { |
|
swap(...); |
|
- } |
|
) |
|
|
|
|
|
@script:python depends on report@ |
|
p << r.p; |
|
@@ |
|
|
|
coccilib.report.print_report(p[0], "WARNING opportunity for swap()") |
|
|
|
@script:python depends on org@ |
|
p << r.p; |
|
@@ |
|
|
|
coccilib.org.print_todo(p[0], "WARNING opportunity for swap()") |
|
|
|
@script:python depends on report@ |
|
p << rvar.p; |
|
@@ |
|
|
|
coccilib.report.print_report(p[0], "WARNING opportunity for swap()") |
|
|
|
@script:python depends on org@ |
|
p << rvar.p; |
|
@@ |
|
|
|
coccilib.org.print_todo(p[0], "WARNING opportunity for swap()")
|
|
|