There are commas used as statement terminations that should typically
have used semicolons instead.  Only direct assignments or use of a single
function or value on a single line are detected by this test.

e.g.:
        foo = bar(),            /* typical use is semicolon not comma */
        bar = baz();

Add an imperfect test to detect these comma uses.

No false positives were found in testing, but many types of false negatives
are possible.

e.g.:
        foo = bar() + 1,        /* comma use, but not direct assignment */
        bar = baz();

Signed-off-by: Joe Perches <[email protected]
---
 scripts/checkpatch.pl | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl= 
index 60d4a79674b6..93b99809df07 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -4936,6 +4936,17 @@ sub process {
                        }
                }
 
+# check if a statement with a comma should be two statements like:
+#      foo = bar(),    /* comma should be semicolon */
+#      bar = baz();
+               if (defined($stat) &&
+                   $stat =~ 
/^\+\s*(?:$Lval\s*$Assignment\s*)?$FuncArg\s*,\s*(?:$Lval\s*$Assignment\s*)?$FuncArg\s*;\s*$/)
 {
+                       my $cnt = statement_rawlines($stat);
+                       my $herectx = get_stat_here($linenr, $cnt, $here);
+                       WARN("SUSPECT_COMMA_SEMICOLON",
+                            "Possible comma where semicolon could be used\n" . 
$herectx);
+               }
+
 # return is not a function
                if (defined($stat) && $stat =~ /^.\s*return(\s*)\(/s) {
                        my $spacing = $1;

Reply via email to