blob: b35519cddb133db6ae9b0b62dd9ccefae6631e87 [file] [log] [blame]
Thomas Gleixner7f904d72019-06-04 10:11:38 +02001// SPDX-License-Identifier: GPL-2.0-only
Julia Lawall97c1cf82010-10-24 23:37:32 +02002/// Find &&/|| operations that include the same argument more than once
Julia Lawall09d4d962018-08-03 18:32:11 +02003//# A common source of false positives is when the expression, or
4//# another expresssion in the same && or || operation, performs a
5//# side effect.
Julia Lawall97c1cf82010-10-24 23:37:32 +02006///
7// Confidence: Moderate
Thomas Gleixner7f904d72019-06-04 10:11:38 +02008// Copyright: (C) 2010 Nicolas Palix, DIKU.
9// Copyright: (C) 2010 Julia Lawall, DIKU.
10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
Julia Lawall97c1cf82010-10-24 23:37:32 +020011// URL: http://coccinelle.lip6.fr/
12// Comments:
Nicolas Palix93f14462013-06-20 13:10:56 +020013// Options: --no-includes --include-headers
Julia Lawall97c1cf82010-10-24 23:37:32 +020014
15virtual context
16virtual org
17virtual report
18
19@r expression@
20expression E;
21position p;
22@@
23
24(
Julia Lawall09d4d962018-08-03 18:32:11 +020025 E@p || ... || E
Julia Lawall97c1cf82010-10-24 23:37:32 +020026|
Julia Lawall09d4d962018-08-03 18:32:11 +020027 E@p && ... && E
Julia Lawall97c1cf82010-10-24 23:37:32 +020028)
29
Julia Lawall09d4d962018-08-03 18:32:11 +020030@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@
Julia Lawall97c1cf82010-10-24 23:37:32 +020050p << r.p;
51@@
52
53cocci.print_main("duplicated argument to && or ||",p)
54
Julia Lawall09d4d962018-08-03 18:32:11 +020055@script:python depends on report && !bad@
Julia Lawall97c1cf82010-10-24 23:37:32 +020056p << r.p;
57@@
58
59coccilib.report.print_report(p[0],"duplicated argument to && or ||")