forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'for-5.14' of git://git.kernel.org/pub/scm/linux/kernel/…
…git/jlawall/linux Pull coccinelle updates from Julia Lawall: "There are two new semantic patches: - minmax: To use min and max instead of ? : - swap: To use swap when possible Some other semantic patches have been updated to better conform to Linux kernel developer expectations or to make the explanation message more clear. Finally, there is a fix for the coccicheck script" * 'for-5.14' of git://git.kernel.org/pub/scm/linux/kernel/git/jlawall/linux: coccinelle: api: remove kobj_to_dev.cocci script scripts: coccicheck: fix troubles on non-English builds coccinelle: misc: minmax: suppress patch generation for err returns drop unneeded *s coccinelle: irqf_oneshot: reduce the severity due to false positives coccinelle: misc: add swap script coccinelle: misc: update uninitialized_var.cocci documentation coccinelle: misc: restrict patch mode in flexible_array.cocci coccinelle: misc: add minmax script
- Loading branch information
Showing
8 changed files
with
384 additions
and
61 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
This file was deleted.
Oops, something went wrong.
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
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
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
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,222 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
/// | ||
/// Check for opencoded min(), max() implementations. | ||
/// Generated patches sometimes require adding a cast to fix compile warning. | ||
/// Warnings/patches scope intentionally limited to a function body. | ||
/// | ||
// Confidence: Medium | ||
// Copyright: (C) 2021 Denis Efremov ISPRAS | ||
// Options: --no-includes --include-headers | ||
// | ||
// Keywords: min, max | ||
// | ||
|
||
|
||
virtual report | ||
virtual org | ||
virtual context | ||
virtual patch | ||
|
||
@rmax depends on !patch@ | ||
identifier func; | ||
expression x, y; | ||
binary operator cmp = {>, >=}; | ||
position p; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
* ((x) cmp@p (y) ? (x) : (y)) | ||
...> | ||
} | ||
|
||
@rmaxif depends on !patch@ | ||
identifier func; | ||
expression x, y; | ||
expression max_val; | ||
binary operator cmp = {>, >=}; | ||
position p; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
* if ((x) cmp@p (y)) { | ||
* max_val = (x); | ||
* } else { | ||
* max_val = (y); | ||
* } | ||
...> | ||
} | ||
|
||
@rmin depends on !patch@ | ||
identifier func; | ||
expression x, y; | ||
binary operator cmp = {<, <=}; | ||
position p; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
* ((x) cmp@p (y) ? (x) : (y)) | ||
...> | ||
} | ||
|
||
@rminif depends on !patch@ | ||
identifier func; | ||
expression x, y; | ||
expression min_val; | ||
binary operator cmp = {<, <=}; | ||
position p; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
* if ((x) cmp@p (y)) { | ||
* min_val = (x); | ||
* } else { | ||
* min_val = (y); | ||
* } | ||
...> | ||
} | ||
|
||
@pmax depends on patch@ | ||
identifier func; | ||
expression x, y; | ||
binary operator cmp = {>=, >}; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
- ((x) cmp (y) ? (x) : (y)) | ||
+ max(x, y) | ||
...> | ||
} | ||
|
||
@pmaxif depends on patch@ | ||
identifier func; | ||
expression x, y; | ||
expression max_val; | ||
binary operator cmp = {>=, >}; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
- if ((x) cmp (y)) { | ||
- max_val = x; | ||
- } else { | ||
- max_val = y; | ||
- } | ||
+ max_val = max(x, y); | ||
...> | ||
} | ||
|
||
// Don't generate patches for errcode returns. | ||
@errcode depends on patch@ | ||
position p; | ||
identifier func; | ||
expression x; | ||
binary operator cmp = {<, <=}; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
return ((x) cmp@p 0 ? (x) : 0); | ||
...> | ||
} | ||
|
||
@pmin depends on patch@ | ||
identifier func; | ||
expression x, y; | ||
binary operator cmp = {<=, <}; | ||
position p != errcode.p; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
- ((x) cmp@p (y) ? (x) : (y)) | ||
+ min(x, y) | ||
...> | ||
} | ||
|
||
@pminif depends on patch@ | ||
identifier func; | ||
expression x, y; | ||
expression min_val; | ||
binary operator cmp = {<=, <}; | ||
@@ | ||
|
||
func(...) | ||
{ | ||
<... | ||
- if ((x) cmp (y)) { | ||
- min_val = x; | ||
- } else { | ||
- min_val = y; | ||
- } | ||
+ min_val = min(x, y); | ||
...> | ||
} | ||
|
||
@script:python depends on report@ | ||
p << rmax.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.report.print_report(p0, "WARNING opportunity for max()") | ||
@script:python depends on org@ | ||
p << rmax.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.org.print_todo(p0, "WARNING opportunity for max()") | ||
@script:python depends on report@ | ||
p << rmaxif.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.report.print_report(p0, "WARNING opportunity for max()") | ||
@script:python depends on org@ | ||
p << rmaxif.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.org.print_todo(p0, "WARNING opportunity for max()") | ||
@script:python depends on report@ | ||
p << rmin.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.report.print_report(p0, "WARNING opportunity for min()") | ||
@script:python depends on org@ | ||
p << rmin.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.org.print_todo(p0, "WARNING opportunity for min()") | ||
@script:python depends on report@ | ||
p << rminif.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.report.print_report(p0, "WARNING opportunity for min()") | ||
@script:python depends on org@ | ||
p << rminif.p; | ||
@@ | ||
for p0 in p: | ||
coccilib.org.print_todo(p0, "WARNING opportunity for min()") |
Oops, something went wrong.