18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/// Find &&/|| operations that include the same argument more than once 38c2ecf20Sopenharmony_ci//# A common source of false positives is when the expression, or 48c2ecf20Sopenharmony_ci//# another expresssion in the same && or || operation, performs a 58c2ecf20Sopenharmony_ci//# side effect. 68c2ecf20Sopenharmony_ci/// 78c2ecf20Sopenharmony_ci// Confidence: Moderate 88c2ecf20Sopenharmony_ci// Copyright: (C) 2010 Nicolas Palix, DIKU. 98c2ecf20Sopenharmony_ci// Copyright: (C) 2010 Julia Lawall, DIKU. 108c2ecf20Sopenharmony_ci// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. 118c2ecf20Sopenharmony_ci// URL: http://coccinelle.lip6.fr/ 128c2ecf20Sopenharmony_ci// Comments: 138c2ecf20Sopenharmony_ci// Options: --no-includes --include-headers 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_civirtual context 168c2ecf20Sopenharmony_civirtual org 178c2ecf20Sopenharmony_civirtual report 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci@r expression@ 208c2ecf20Sopenharmony_ciexpression E; 218c2ecf20Sopenharmony_ciposition p; 228c2ecf20Sopenharmony_ci@@ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci( 258c2ecf20Sopenharmony_ci E@p || ... || E 268c2ecf20Sopenharmony_ci| 278c2ecf20Sopenharmony_ci E@p && ... && E 288c2ecf20Sopenharmony_ci) 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci@bad@ 318c2ecf20Sopenharmony_ciexpression r.E,e1,e2,fn; 328c2ecf20Sopenharmony_ciposition r.p; 338c2ecf20Sopenharmony_ciassignment operator op; 348c2ecf20Sopenharmony_ci@@ 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci( 378c2ecf20Sopenharmony_ciE@p 388c2ecf20Sopenharmony_ci& 398c2ecf20Sopenharmony_ci <+... \(fn(...)\|e1 op e2\|e1++\|e1--\|++e1\|--e1\) ...+> 408c2ecf20Sopenharmony_ci) 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci@depends on context && !bad@ 438c2ecf20Sopenharmony_ciexpression r.E; 448c2ecf20Sopenharmony_ciposition r.p; 458c2ecf20Sopenharmony_ci@@ 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci*E@p 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci@script:python depends on org && !bad@ 508c2ecf20Sopenharmony_cip << r.p; 518c2ecf20Sopenharmony_ci@@ 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cicocci.print_main("duplicated argument to && or ||",p) 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci@script:python depends on report && !bad@ 568c2ecf20Sopenharmony_cip << r.p; 578c2ecf20Sopenharmony_ci@@ 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cicoccilib.report.print_report(p[0],"duplicated argument to && or ||") 60