-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
coccinelle: semantic patch for bool issues
Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Reviewed-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Michal Marek <mmarek@suse.cz>
- Loading branch information
Julia Lawall
authored and
Michal Marek
committed
Feb 24, 2012
1 parent
4a05f06
commit 8991058
Showing
1 changed file
with
178 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
/// Bool initializations should use true and false. Bool tests don't need | ||
/// comparisons. Based on contributions from Joe Perches, Rusty Russell | ||
/// and Bruce W Allan. | ||
/// | ||
// Confidence: High | ||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | ||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | ||
// URL: http://coccinelle.lip6.fr/ | ||
// Options: -include_headers | ||
|
||
virtual patch | ||
virtual context | ||
virtual org | ||
virtual report | ||
|
||
@depends on patch@ | ||
bool t; | ||
symbol true; | ||
symbol false; | ||
@@ | ||
|
||
( | ||
- t == true | ||
+ t | ||
| | ||
- true == t | ||
+ t | ||
| | ||
- t != true | ||
+ !t | ||
| | ||
- true != t | ||
+ !t | ||
| | ||
- t == false | ||
+ !t | ||
| | ||
- false == t | ||
+ !t | ||
| | ||
- t != false | ||
+ t | ||
| | ||
- false != t | ||
+ t | ||
) | ||
|
||
@depends on patch disable is_zero, isnt_zero@ | ||
bool t; | ||
@@ | ||
|
||
( | ||
- t == 1 | ||
+ t | ||
| | ||
- t != 1 | ||
+ !t | ||
| | ||
- t == 0 | ||
+ !t | ||
| | ||
- t != 0 | ||
+ t | ||
) | ||
|
||
@depends on patch@ | ||
bool b; | ||
@@ | ||
( | ||
b = | ||
- 0 | ||
+ false | ||
| | ||
b = | ||
- 1 | ||
+ true | ||
) | ||
|
||
// --------------------------------------------------------------------- | ||
|
||
@r1 depends on !patch@ | ||
bool t; | ||
position p; | ||
@@ | ||
|
||
( | ||
* t@p == true | ||
| | ||
* true == t@p | ||
| | ||
* t@p != true | ||
| | ||
* true != t@p | ||
| | ||
* t@p == false | ||
| | ||
* false == t@p | ||
| | ||
* t@p != false | ||
| | ||
* false != t@p | ||
) | ||
|
||
@r2 depends on !patch disable is_zero, isnt_zero@ | ||
bool t; | ||
position p; | ||
@@ | ||
|
||
( | ||
* t@p == 1 | ||
| | ||
* t@p != 1 | ||
| | ||
* t@p == 0 | ||
| | ||
* t@p != 0 | ||
) | ||
|
||
@r3 depends on !patch@ | ||
bool b; | ||
position p1,p2; | ||
constant c; | ||
@@ | ||
( | ||
*b@p1 = 0 | ||
| | ||
*b@p1 = 1 | ||
| | ||
*b@p2 = c | ||
) | ||
|
||
@script:python depends on org@ | ||
p << r1.p; | ||
@@ | ||
cocci.print_main("WARNING: Comparison to bool",p) | ||
@script:python depends on org@ | ||
p << r2.p; | ||
@@ | ||
cocci.print_main("WARNING: Comparison of bool to 0/1",p) | ||
@script:python depends on org@ | ||
p1 << r3.p1; | ||
@@ | ||
cocci.print_main("WARNING: Assignment of bool to 0/1",p1) | ||
@script:python depends on org@ | ||
p2 << r3.p2; | ||
@@ | ||
cocci.print_main("ERROR: Assignment of bool to non-0/1 constant",p2) | ||
@script:python depends on report@ | ||
p << r1.p; | ||
@@ | ||
coccilib.report.print_report(p[0],"WARNING: Comparison to bool") | ||
@script:python depends on report@ | ||
p << r2.p; | ||
@@ | ||
coccilib.report.print_report(p[0],"WARNING: Comparison of bool to 0/1") | ||
@script:python depends on report@ | ||
p1 << r3.p1; | ||
@@ | ||
coccilib.report.print_report(p1[0],"WARNING: Assignment of bool to 0/1") | ||
@script:python depends on report@ | ||
p2 << r3.p2; | ||
@@ | ||
coccilib.report.print_report(p2[0],"ERROR: Assignment of bool to non-0/1 constant") |