[PATCH] devtools/cocci: change boolean negation to bitwise negation
Weiguo Li
liwg06 at foxmail.com
Fri Mar 4 16:31:53 CET 2022
Combining boolean operator with bitwise operator is suspicious. When
this happens, it has a chance that the bitwise negation operation is
mistakenly written as a boolean negation operation. This script is
used to find this kind of problems.
example:
if (x & !BITS_MASK)
changed to:
if (x & ~BITS_MASK)
The idea came from a demo script in coccinelle website:
https://coccinelle.gitlabpages.inria.fr/website/rules/notand.html
Signed-off-by: Weiguo Li <liwg06 at foxmail.com>
---
devtools/cocci/bitwise_negation.cocci | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 devtools/cocci/bitwise_negation.cocci
diff --git a/devtools/cocci/bitwise_negation.cocci b/devtools/cocci/bitwise_negation.cocci
new file mode 100644
index 0000000000..78fc677e4e
--- /dev/null
+++ b/devtools/cocci/bitwise_negation.cocci
@@ -0,0 +1,18 @@
+//
+// The bitwise negation operation is easy to be mistakenly written as a boolean
+// negation operation, this script is used to find this kind of problem.
+//
+// Note: If it is confirmed to be a boolean negation operation, it is recommended
+// that change & to && to avoid false positives.
+//
+@@ expression E; constant C; @@
+(
+ !E & !C
+|
+- !E & C
++ !(E & C)
+|
+- E & !C
++ E & ~C
+)
+
--
2.25.1
More information about the dev
mailing list