|  | // 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()") |