blob: fed6126e2b9d30e3c00e2f46970e8780c7392813 [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001// SPDX-License-Identifier: GPL-2.0-only
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00002/// Bool initializations should use true and false. Bool tests don't need
3/// comparisons. Based on contributions from Joe Perches, Rusty Russell
4/// and Bruce W Allan.
5///
6// Confidence: High
David Brazdil0f672f62019-12-10 10:32:29 +00007// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
8// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00009// URL: http://coccinelle.lip6.fr/
10// Options: --include-headers
11
12virtual patch
13virtual context
14virtual org
15virtual report
16
David Brazdil0f672f62019-12-10 10:32:29 +000017@boolok@
18symbol true,false;
19@@
20(
21true
22|
23false
24)
25
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000026@depends on patch@
27bool t;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000028@@
29
30(
31- t == true
32+ t
33|
34- true == t
35+ t
36|
37- t != true
38+ !t
39|
40- true != t
41+ !t
42|
43- t == false
44+ !t
45|
46- false == t
47+ !t
48|
49- t != false
50+ t
51|
52- false != t
53+ t
54)
55
56@depends on patch disable is_zero, isnt_zero@
57bool t;
58@@
59
60(
61- t == 1
62+ t
63|
64- t != 1
65+ !t
66|
67- t == 0
68+ !t
69|
70- t != 0
71+ t
72)
73
David Brazdil0f672f62019-12-10 10:32:29 +000074@depends on patch && boolok@
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000075bool b;
76@@
77(
78 b =
79- 0
80+ false
81|
82 b =
83- 1
84+ true
85)
86
87// ---------------------------------------------------------------------
88
89@r1 depends on !patch@
90bool t;
91position p;
92@@
93
94(
95* t@p == true
96|
97* true == t@p
98|
99* t@p != true
100|
101* true != t@p
102|
103* t@p == false
104|
105* false == t@p
106|
107* t@p != false
108|
109* false != t@p
110)
111
112@r2 depends on !patch disable is_zero, isnt_zero@
113bool t;
114position p;
115@@
116
117(
118* t@p == 1
119|
120* t@p != 1
121|
122* t@p == 0
123|
124* t@p != 0
125)
126
David Brazdil0f672f62019-12-10 10:32:29 +0000127@r3 depends on !patch && boolok@
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000128bool b;
David Brazdil0f672f62019-12-10 10:32:29 +0000129position p1;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000130@@
131(
132*b@p1 = 0
133|
134*b@p1 = 1
David Brazdil0f672f62019-12-10 10:32:29 +0000135)
136
137@r4 depends on !patch@
138bool b;
139position p2;
140identifier i;
141constant c != {0,1};
142@@
143(
144 b = i
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000145|
146*b@p2 = c
147)
148
149@script:python depends on org@
150p << r1.p;
151@@
152
153cocci.print_main("WARNING: Comparison to bool",p)
154
155@script:python depends on org@
156p << r2.p;
157@@
158
David Brazdil0f672f62019-12-10 10:32:29 +0000159cocci.print_main("WARNING: Comparison of 0/1 to bool variable",p)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000160
161@script:python depends on org@
162p1 << r3.p1;
163@@
164
David Brazdil0f672f62019-12-10 10:32:29 +0000165cocci.print_main("WARNING: Assignment of 0/1 to bool variable",p1)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000166
167@script:python depends on org@
David Brazdil0f672f62019-12-10 10:32:29 +0000168p2 << r4.p2;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000169@@
170
David Brazdil0f672f62019-12-10 10:32:29 +0000171cocci.print_main("ERROR: Assignment of non-0/1 constant to bool variable",p2)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000172
173@script:python depends on report@
174p << r1.p;
175@@
176
177coccilib.report.print_report(p[0],"WARNING: Comparison to bool")
178
179@script:python depends on report@
180p << r2.p;
181@@
182
David Brazdil0f672f62019-12-10 10:32:29 +0000183coccilib.report.print_report(p[0],"WARNING: Comparison of 0/1 to bool variable")
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000184
185@script:python depends on report@
186p1 << r3.p1;
187@@
188
David Brazdil0f672f62019-12-10 10:32:29 +0000189coccilib.report.print_report(p1[0],"WARNING: Assignment of 0/1 to bool variable")
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000190
191@script:python depends on report@
David Brazdil0f672f62019-12-10 10:32:29 +0000192p2 << r4.p2;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000193@@
194
David Brazdil0f672f62019-12-10 10:32:29 +0000195coccilib.report.print_report(p2[0],"ERROR: Assignment of non-0/1 constant to bool variable")