162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/// 362306a36Sopenharmony_ci/// Check for opencoded swap() implementation. 462306a36Sopenharmony_ci/// 562306a36Sopenharmony_ci// Confidence: High 662306a36Sopenharmony_ci// Copyright: (C) 2021 Denis Efremov ISPRAS 762306a36Sopenharmony_ci// Options: --no-includes --include-headers 862306a36Sopenharmony_ci// 962306a36Sopenharmony_ci// Keywords: swap 1062306a36Sopenharmony_ci// 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_civirtual patch 1362306a36Sopenharmony_civirtual org 1462306a36Sopenharmony_civirtual report 1562306a36Sopenharmony_civirtual context 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci@rvar depends on !patch@ 1862306a36Sopenharmony_ciidentifier tmp; 1962306a36Sopenharmony_ciexpression a, b; 2062306a36Sopenharmony_citype T; 2162306a36Sopenharmony_ciposition p; 2262306a36Sopenharmony_ci@@ 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci( 2562306a36Sopenharmony_ci* T tmp; 2662306a36Sopenharmony_ci| 2762306a36Sopenharmony_ci* T tmp = 0; 2862306a36Sopenharmony_ci| 2962306a36Sopenharmony_ci* T *tmp = NULL; 3062306a36Sopenharmony_ci) 3162306a36Sopenharmony_ci... when != tmp 3262306a36Sopenharmony_ci* tmp = a; 3362306a36Sopenharmony_ci* a = b;@p 3462306a36Sopenharmony_ci* b = tmp; 3562306a36Sopenharmony_ci... when != tmp 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci@r depends on !patch@ 3862306a36Sopenharmony_ciidentifier tmp; 3962306a36Sopenharmony_ciexpression a, b; 4062306a36Sopenharmony_ciposition p != rvar.p; 4162306a36Sopenharmony_ci@@ 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci* tmp = a; 4462306a36Sopenharmony_ci* a = b;@p 4562306a36Sopenharmony_ci* b = tmp; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci@rpvar depends on patch@ 4862306a36Sopenharmony_ciidentifier tmp; 4962306a36Sopenharmony_ciexpression a, b; 5062306a36Sopenharmony_citype T; 5162306a36Sopenharmony_ci@@ 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci( 5462306a36Sopenharmony_ci- T tmp; 5562306a36Sopenharmony_ci| 5662306a36Sopenharmony_ci- T tmp = 0; 5762306a36Sopenharmony_ci| 5862306a36Sopenharmony_ci- T *tmp = NULL; 5962306a36Sopenharmony_ci) 6062306a36Sopenharmony_ci... when != tmp 6162306a36Sopenharmony_ci- tmp = a; 6262306a36Sopenharmony_ci- a = b; 6362306a36Sopenharmony_ci- b = tmp 6462306a36Sopenharmony_ci+ swap(a, b) 6562306a36Sopenharmony_ci ; 6662306a36Sopenharmony_ci... when != tmp 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci@rp depends on patch@ 6962306a36Sopenharmony_ciidentifier tmp; 7062306a36Sopenharmony_ciexpression a, b; 7162306a36Sopenharmony_ci@@ 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci- tmp = a; 7462306a36Sopenharmony_ci- a = b; 7562306a36Sopenharmony_ci- b = tmp 7662306a36Sopenharmony_ci+ swap(a, b) 7762306a36Sopenharmony_ci ; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci@depends on patch && (rpvar || rp)@ 8062306a36Sopenharmony_ci@@ 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci( 8362306a36Sopenharmony_ci for (...;...;...) 8462306a36Sopenharmony_ci- { 8562306a36Sopenharmony_ci swap(...); 8662306a36Sopenharmony_ci- } 8762306a36Sopenharmony_ci| 8862306a36Sopenharmony_ci while (...) 8962306a36Sopenharmony_ci- { 9062306a36Sopenharmony_ci swap(...); 9162306a36Sopenharmony_ci- } 9262306a36Sopenharmony_ci| 9362306a36Sopenharmony_ci if (...) 9462306a36Sopenharmony_ci- { 9562306a36Sopenharmony_ci swap(...); 9662306a36Sopenharmony_ci- } 9762306a36Sopenharmony_ci) 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci@script:python depends on report@ 10162306a36Sopenharmony_cip << r.p; 10262306a36Sopenharmony_ci@@ 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cicoccilib.report.print_report(p[0], "WARNING opportunity for swap()") 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci@script:python depends on org@ 10762306a36Sopenharmony_cip << r.p; 10862306a36Sopenharmony_ci@@ 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_cicoccilib.org.print_todo(p[0], "WARNING opportunity for swap()") 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci@script:python depends on report@ 11362306a36Sopenharmony_cip << rvar.p; 11462306a36Sopenharmony_ci@@ 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cicoccilib.report.print_report(p[0], "WARNING opportunity for swap()") 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci@script:python depends on org@ 11962306a36Sopenharmony_cip << rvar.p; 12062306a36Sopenharmony_ci@@ 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_cicoccilib.org.print_todo(p[0], "WARNING opportunity for swap()") 123