diff options
author | Joe Perches <joe@perches.com> | 2012-12-17 19:02:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-17 20:15:19 -0500 |
commit | d1e2ad07e78c4bbac9fce4d2e3c0fe60bce091d8 (patch) | |
tree | 41193684d79788aef5d00c817ba570c27c7de02f /scripts | |
parent | 88982fea52d0115d44b77619afef576f24cdb844 (diff) |
checkpatch: add --strict test for switch/default missing break
switch default case is sometimes written as "default:;". This can cause
new cases added below the default to be defective.
Suggest adding a break; after empty default cases to avoid fallthrough
defects.
Fixed indentation in the other semicolon test above it.
Suggested-by: Peter Senna Tschudin <peter.senna@gmail.com>
Signed-off-by: Joe Perches <joe@perches.com>
Cc: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/checkpatch.pl | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index f27b0b53e3e..725c59611e9 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -3448,8 +3448,22 @@ sub process { | |||
3448 | 3448 | ||
3449 | # check for multiple semicolons | 3449 | # check for multiple semicolons |
3450 | if ($line =~ /;\s*;\s*$/) { | 3450 | if ($line =~ /;\s*;\s*$/) { |
3451 | WARN("ONE_SEMICOLON", | 3451 | WARN("ONE_SEMICOLON", |
3452 | "Statements terminations use 1 semicolon\n" . $herecurr); | 3452 | "Statements terminations use 1 semicolon\n" . $herecurr); |
3453 | } | ||
3454 | |||
3455 | # check for switch/default statements without a break; | ||
3456 | if ($^V && $^V ge 5.10.0 && | ||
3457 | defined $stat && | ||
3458 | $stat =~ /^\+[$;\s]*(?:case[$;\s]+\w+[$;\s]*:[$;\s]*|)*[$;\s]*\bdefault[$;\s]*:[$;\s]*;/g) { | ||
3459 | my $ctx = ''; | ||
3460 | my $herectx = $here . "\n"; | ||
3461 | my $cnt = statement_rawlines($stat); | ||
3462 | for (my $n = 0; $n < $cnt; $n++) { | ||
3463 | $herectx .= raw_line($linenr, $n) . "\n"; | ||
3464 | } | ||
3465 | WARN("DEFAULT_NO_BREAK", | ||
3466 | "switch default: should use break\n" . $herectx); | ||
3453 | } | 3467 | } |
3454 | 3468 | ||
3455 | # check for gcc specific __FUNCTION__ | 3469 | # check for gcc specific __FUNCTION__ |