aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/coccinelle/iterators/itnull.cocci
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/coccinelle/iterators/itnull.cocci')
-rw-r--r--scripts/coccinelle/iterators/itnull.cocci54
1 files changed, 9 insertions, 45 deletions
diff --git a/scripts/coccinelle/iterators/itnull.cocci b/scripts/coccinelle/iterators/itnull.cocci
index 259899f6838..baa4297a4ed 100644
--- a/scripts/coccinelle/iterators/itnull.cocci
+++ b/scripts/coccinelle/iterators/itnull.cocci
@@ -1,24 +1,20 @@
1/// Many iterators have the property that the first argument is always bound 1/// Many iterators have the property that the first argument is always bound
2/// to a real list element, never NULL. 2/// to a real list element, never NULL. False positives arise for some
3//# False positives arise for some iterators that do not have this property, 3/// iterators that do not have this property, or in cases when the loop
4//# or in cases when the loop cursor is reassigned. The latter should only 4/// cursor is reassigned. The latter should only happen when the matched
5//# happen when the matched code is on the way to a loop exit (break, goto, 5/// code is on the way to a loop exit (break, goto, or return).
6//# or return).
7/// 6///
8// Confidence: Moderate 7// Confidence: Moderate
9// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. 8// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
10// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. 9// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
11// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. 10// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
12// URL: http://coccinelle.lip6.fr/ 11// URL: http://coccinelle.lip6.fr/
13// Comments: 12// Comments:
14// Options: -no_includes -include_headers 13// Options: -no_includes -include_headers
15 14
16virtual patch 15virtual patch
17virtual context
18virtual org
19virtual report
20 16
21@depends on patch@ 17@@
22iterator I; 18iterator I;
23expression x,E,E1,E2; 19expression x,E,E1,E2;
24statement S,S1,S2; 20statement S,S1,S2;
@@ -59,36 +55,4 @@ I(x,...) { <...
59 x != NULL 55 x != NULL
60+ ) 56+ )
61) 57)
62 ...> } 58 ...> } \ No newline at end of file
63
64@r depends on !patch exists@
65iterator I;
66expression x,E;
67position p1,p2;
68@@
69
70*I@p1(x,...)
71{ ... when != x = E
72(
73* x@p2 == NULL
74|
75* x@p2 != NULL
76)
77 ... when any
78}
79
80@script:python depends on org@
81p1 << r.p1;
82p2 << r.p2;
83@@
84
85cocci.print_main("iterator-bound variable",p1)
86cocci.print_secs("useless NULL test",p2)
87
88@script:python depends on report@
89p1 << r.p1;
90p2 << r.p2;
91@@
92
93msg = "ERROR: iterator variable bound on line %s cannot be NULL" % (p1[0].line)
94coccilib.report.print_report(p2[0], msg)