1// SPDX-License-Identifier: GPL-2.0-only
2/// Find &&/|| operations that include the same argument more than once
3//# A common source of false positives is when the expression, or
4//# another expresssion in the same && or || operation, performs a
5//# side effect.
6///
7// Confidence: Moderate
8// Copyright: (C) 2010 Nicolas Palix, DIKU.
9// Copyright: (C) 2010 Julia Lawall, DIKU.
10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
11// URL: https://coccinelle.gitlabpages.inria.fr/website
12// Comments:
13// Options: --no-includes --include-headers
14
15virtual context
16virtual org
17virtual report
18
19@r expression@
20expression E;
21position p;
22@@
23
24(
25 E@p || ... || E
26|
27 E@p && ... && E
28)
29
30@bad@
31expression r.E,e1,e2,fn;
32position r.p;
33assignment operator op;
34@@
35
36(
37E@p
38&
39 <+... \(fn(...)\|e1 op e2\|e1++\|e1--\|++e1\|--e1\) ...+>
40)
41
42@depends on context && !bad@
43expression r.E;
44position r.p;
45@@
46
47*E@p
48
49@script:python depends on org && !bad@
50p << r.p;
51@@
52
53cocci.print_main("duplicated argument to && or ||",p)
54
55@script:python depends on report && !bad@
56p << r.p;
57@@
58
59coccilib.report.print_report(p[0],"duplicated argument to && or ||")
60