devtools/cocci: change boolean negation to bitwise negation
Checks
Commit Message
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@foxmail.com>
---
devtools/cocci/bitwise_negation.cocci | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 devtools/cocci/bitwise_negation.cocci
Comments
On Fri, 4 Mar 2022 23:31:53 +0800
Weiguo Li <liwg06@foxmail.com> wrote:
> 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@foxmail.com>
This never got merged probably because it address something that is not
happening in DPDK. Ran the script and it found nothing.
Also, script adds empty blank line at EOF which cause a warning
when merging in git.
Dropping this patch as not needed.
new file mode 100644
@@ -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
+)
+