1/// Bool initializations should use true and false.  Bool tests don't need
2/// comparisons.  Based on contributions from Joe Perches, Rusty Russell
3/// and Bruce W Allan.
4///
5// Confidence: High
6// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.  GPLv2.
7// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.  GPLv2.
8// URL: http://coccinelle.lip6.fr/
9// Options: --include-headers
10
11virtual patch
12virtual context
13virtual org
14virtual report
15
16@depends on patch@
17bool t;
18symbol true;
19symbol false;
20@@
21
22(
23- t == true
24+ t
25|
26- true == t
27+ t
28|
29- t != true
30+ !t
31|
32- true != t
33+ !t
34|
35- t == false
36+ !t
37|
38- false == t
39+ !t
40|
41- t != false
42+ t
43|
44- false != t
45+ t
46)
47
48@depends on patch disable is_zero, isnt_zero@
49bool t;
50@@
51
52(
53- t == 1
54+ t
55|
56- t != 1
57+ !t
58|
59- t == 0
60+ !t
61|
62- t != 0
63+ t
64)
65
66@depends on patch@
67bool b;
68@@
69(
70 b =
71- 0
72+ false
73|
74 b =
75- 1
76+ true
77)
78
79// ---------------------------------------------------------------------
80
81@r1 depends on !patch@
82bool t;
83position p;
84@@
85
86(
87* t@p == true
88|
89* true == t@p
90|
91* t@p != true
92|
93* true != t@p
94|
95* t@p == false
96|
97* false == t@p
98|
99* t@p != false
100|
101* false != t@p
102)
103
104@r2 depends on !patch disable is_zero, isnt_zero@
105bool t;
106position p;
107@@
108
109(
110* t@p == 1
111|
112* t@p != 1
113|
114* t@p == 0
115|
116* t@p != 0
117)
118
119@r3 depends on !patch@
120bool b;
121position p1,p2;
122constant c;
123@@
124(
125*b@p1 = 0
126|
127*b@p1 = 1
128|
129*b@p2 = c
130)
131
132@script:python depends on org@
133p << r1.p;
134@@
135
136cocci.print_main("WARNING: Comparison to bool",p)
137
138@script:python depends on org@
139p << r2.p;
140@@
141
142cocci.print_main("WARNING: Comparison of bool to 0/1",p)
143
144@script:python depends on org@
145p1 << r3.p1;
146@@
147
148cocci.print_main("WARNING: Assignment of bool to 0/1",p1)
149
150@script:python depends on org@
151p2 << r3.p2;
152@@
153
154cocci.print_main("ERROR: Assignment of bool to non-0/1 constant",p2)
155
156@script:python depends on report@
157p << r1.p;
158@@
159
160coccilib.report.print_report(p[0],"WARNING: Comparison to bool")
161
162@script:python depends on report@
163p << r2.p;
164@@
165
166coccilib.report.print_report(p[0],"WARNING: Comparison of bool to 0/1")
167
168@script:python depends on report@
169p1 << r3.p1;
170@@
171
172coccilib.report.print_report(p1[0],"WARNING: Assignment of bool to 0/1")
173
174@script:python depends on report@
175p2 << r3.p2;
176@@
177
178coccilib.report.print_report(p2[0],"ERROR: Assignment of bool to non-0/1 constant")
179