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