History

Coccinelle: Add iterators/itnull.cocci

Many iterators have the property that the first argument is always bound to a real list element, never NULL. False positives arise for some iterators that do not have this property, or in cases when the loop cursor is reassigned. The latter should only happen when the matched code is on the way to a loop exit (break, goto, or return).

Nicolas Palix committed 16 years ago

Commit afc48a81 parent 40451591 file · +58 −0Browse files

Unified · Split

scripts/coccinelle/iterators/itnull.cocci+58−0
@@ -0,0 +1,58 @@
1+/// Many iterators have the property that the first argument is always bound
2+/// to a real list element, never NULL. False positives arise for some
3+/// iterators that do not have this property, or in cases when the loop
4+/// cursor is reassigned. The latter should only happen when the matched
5+/// code is on the way to a loop exit (break, goto, or return).
6+///
7+// Confidence: Moderate
8+// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
9+// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
10+// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
11+// URL: http://coccinelle.lip6.fr/
12+// Comments:
13+// Options: -no_includes -include_headers
14+
15+virtual patch
16+
17+@@
18+iterator I;
19+expression x,E,E1,E2;
20+statement S,S1,S2;
21+@@
22+
23+I(x,...) { <...
24+(
25+- if (x == NULL && ...) S
26+|
27+- if (x != NULL || ...)
28+ S
29+|
30+- (x == NULL) ||
31+ E
32+|
33+- (x != NULL) &&
34+ E
35+|
36+- (x == NULL && ...) ? E1 :
37+ E2
38+|
39+- (x != NULL || ...) ?
40+ E1
41+- : E2
42+|
43+- if (x == NULL && ...) S1 else
44+ S2
45+|
46+- if (x != NULL || ...)
47+ S1
48+- else S2
49+|
50++ BAD(
51+ x == NULL
52++ )
53+|
54++ BAD(
55+ x != NULL
56++ )
57+)
58+ ...> }