diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/checkpatch.pl | 183 |
1 files changed, 129 insertions, 54 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index aea90d30d229..56c364c1df81 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
| @@ -9,7 +9,7 @@ use strict; | |||
| 9 | my $P = $0; | 9 | my $P = $0; |
| 10 | $P =~ s@.*/@@g; | 10 | $P =~ s@.*/@@g; |
| 11 | 11 | ||
| 12 | my $V = '0.04'; | 12 | my $V = '0.05'; |
| 13 | 13 | ||
| 14 | use Getopt::Long qw(:config no_auto_abbrev); | 14 | use Getopt::Long qw(:config no_auto_abbrev); |
| 15 | 15 | ||
| @@ -17,11 +17,13 @@ my $quiet = 0; | |||
| 17 | my $tree = 1; | 17 | my $tree = 1; |
| 18 | my $chk_signoff = 1; | 18 | my $chk_signoff = 1; |
| 19 | my $chk_patch = 1; | 19 | my $chk_patch = 1; |
| 20 | my $tst_type = 0; | ||
| 20 | GetOptions( | 21 | GetOptions( |
| 21 | 'q|quiet' => \$quiet, | 22 | 'q|quiet' => \$quiet, |
| 22 | 'tree!' => \$tree, | 23 | 'tree!' => \$tree, |
| 23 | 'signoff!' => \$chk_signoff, | 24 | 'signoff!' => \$chk_signoff, |
| 24 | 'patch!' => \$chk_patch, | 25 | 'patch!' => \$chk_patch, |
| 26 | 'test-type!' => \$tst_type, | ||
| 25 | ) or exit; | 27 | ) or exit; |
| 26 | 28 | ||
| 27 | my $exit = 0; | 29 | my $exit = 0; |
| @@ -151,7 +153,7 @@ sub sanitise_line { | |||
| 151 | } | 153 | } |
| 152 | 154 | ||
| 153 | sub ctx_block_get { | 155 | sub ctx_block_get { |
| 154 | my ($linenr, $remain, $outer) = @_; | 156 | my ($linenr, $remain, $outer, $open, $close) = @_; |
| 155 | my $line; | 157 | my $line; |
| 156 | my $start = $linenr - 1; | 158 | my $start = $linenr - 1; |
| 157 | my $blk = ''; | 159 | my $blk = ''; |
| @@ -165,8 +167,8 @@ sub ctx_block_get { | |||
| 165 | 167 | ||
| 166 | $blk .= $rawlines[$line]; | 168 | $blk .= $rawlines[$line]; |
| 167 | 169 | ||
| 168 | @o = ($blk =~ /\{/g); | 170 | @o = ($blk =~ /$open/g); |
| 169 | @c = ($blk =~ /\}/g); | 171 | @c = ($blk =~ /$close/g); |
| 170 | 172 | ||
| 171 | if (!$outer || (scalar(@o) - scalar(@c)) == 1) { | 173 | if (!$outer || (scalar(@o) - scalar(@c)) == 1) { |
| 172 | push(@res, $rawlines[$line]); | 174 | push(@res, $rawlines[$line]); |
| @@ -180,12 +182,17 @@ sub ctx_block_get { | |||
| 180 | sub ctx_block_outer { | 182 | sub ctx_block_outer { |
| 181 | my ($linenr, $remain) = @_; | 183 | my ($linenr, $remain) = @_; |
| 182 | 184 | ||
| 183 | return ctx_block_get($linenr, $remain, 1); | 185 | return ctx_block_get($linenr, $remain, 1, '\{', '\}'); |
| 184 | } | 186 | } |
| 185 | sub ctx_block { | 187 | sub ctx_block { |
| 186 | my ($linenr, $remain) = @_; | 188 | my ($linenr, $remain) = @_; |
| 187 | 189 | ||
| 188 | return ctx_block_get($linenr, $remain, 0); | 190 | return ctx_block_get($linenr, $remain, 0, '\{', '\}'); |
| 191 | } | ||
| 192 | sub ctx_statement { | ||
| 193 | my ($linenr, $remain) = @_; | ||
| 194 | |||
| 195 | return ctx_block_get($linenr, $remain, 0, '\(', '\)'); | ||
| 189 | } | 196 | } |
| 190 | 197 | ||
| 191 | sub ctx_locate_comment { | 198 | sub ctx_locate_comment { |
| @@ -264,9 +271,30 @@ sub process { | |||
| 264 | my $in_comment = 0; | 271 | my $in_comment = 0; |
| 265 | my $first_line = 0; | 272 | my $first_line = 0; |
| 266 | 273 | ||
| 274 | my $ident = '[A-Za-z\d_]+'; | ||
| 275 | my $storage = '(?:extern|static)'; | ||
| 276 | my $sparse = '(?:__user|__kernel|__force|__iomem)'; | ||
| 277 | my $type = '(?:unsigned\s+)?' . | ||
| 278 | '(?:void|char|short|int|long|unsigned|float|double|' . | ||
| 279 | 'long\s+long|' . | ||
| 280 | "struct\\s+${ident}|" . | ||
| 281 | "union\\s+${ident}|" . | ||
| 282 | "${ident}_t)" . | ||
| 283 | "(?:\\s+$sparse)*" . | ||
| 284 | '(?:\s*\*+)?'; | ||
| 285 | my $attribute = '(?:__read_mostly|__init|__initdata)'; | ||
| 286 | |||
| 287 | my $Ident = $ident; | ||
| 288 | my $Type = $type; | ||
| 289 | my $Storage = $storage; | ||
| 290 | my $Declare = "(?:$storage\\s+)?$type"; | ||
| 291 | my $Attribute = $attribute; | ||
| 292 | |||
| 267 | foreach my $line (@lines) { | 293 | foreach my $line (@lines) { |
| 268 | $linenr++; | 294 | $linenr++; |
| 269 | 295 | ||
| 296 | my $rawline = $line; | ||
| 297 | |||
| 270 | #extract the filename as it passes | 298 | #extract the filename as it passes |
| 271 | if ($line=~/^\+\+\+\s+(\S+)/) { | 299 | if ($line=~/^\+\+\+\s+(\S+)/) { |
| 272 | $realfile=$1; | 300 | $realfile=$1; |
| @@ -361,7 +389,7 @@ sub process { | |||
| 361 | next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/); | 389 | next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/); |
| 362 | 390 | ||
| 363 | #trailing whitespace | 391 | #trailing whitespace |
| 364 | if ($line=~/\+.*\S\s+$/) { | 392 | if ($line=~/^\+.*\S\s+$/) { |
| 365 | my $herevet = "$here\n" . cat_vet($line) . "\n\n"; | 393 | my $herevet = "$here\n" . cat_vet($line) . "\n\n"; |
| 366 | print "trailing whitespace\n"; | 394 | print "trailing whitespace\n"; |
| 367 | print "$herevet"; | 395 | print "$herevet"; |
| @@ -392,17 +420,20 @@ sub process { | |||
| 392 | # | 420 | # |
| 393 | next if ($in_comment); | 421 | next if ($in_comment); |
| 394 | 422 | ||
| 395 | # Remove comments from the line before processing. | 423 | # Remove comments from the line before processing. |
| 396 | $line =~ s@/\*.*\*/@@g; | 424 | $line =~ s@/\*.*\*/@@g; |
| 397 | $line =~ s@/\*.*@@; | 425 | $line =~ s@/\*.*@@; |
| 398 | $line =~ s@.*\*/@@; | 426 | $line =~ s@.*\*/@@; |
| 399 | 427 | ||
| 400 | # | 428 | # Standardise the strings and chars within the input to simplify matching. |
| 401 | # Checks which may be anchored in the context. | 429 | $line = sanitise_line($line); |
| 402 | # | 430 | |
| 431 | # | ||
| 432 | # Checks which may be anchored in the context. | ||
| 433 | # | ||
| 403 | 434 | ||
| 404 | # Check for switch () and associated case and default | 435 | # Check for switch () and associated case and default |
| 405 | # statements should be at the same indent. | 436 | # statements should be at the same indent. |
| 406 | if ($line=~/\bswitch\s*\(.*\)/) { | 437 | if ($line=~/\bswitch\s*\(.*\)/) { |
| 407 | my $err = ''; | 438 | my $err = ''; |
| 408 | my $sep = ''; | 439 | my $sep = ''; |
| @@ -428,9 +459,30 @@ sub process { | |||
| 428 | #ignore lines not being added | 459 | #ignore lines not being added |
| 429 | if ($line=~/^[^\+]/) {next;} | 460 | if ($line=~/^[^\+]/) {next;} |
| 430 | 461 | ||
| 431 | # | 462 | # TEST: allow direct testing of the type matcher. |
| 432 | # Checks which are anchored on the added line. | 463 | if ($tst_type && $line =~ /^.$Declare$/) { |
| 433 | # | 464 | print "TEST: is type $Declare\n"; |
| 465 | print "$herecurr"; | ||
| 466 | $clean = 0; | ||
| 467 | next; | ||
| 468 | } | ||
| 469 | |||
| 470 | # | ||
| 471 | # Checks which are anchored on the added line. | ||
| 472 | # | ||
| 473 | |||
| 474 | # check for malformed paths in #include statements (uses RAW line) | ||
| 475 | if ($rawline =~ m{^.#\s*include\s+[<"](.*)[">]}) { | ||
| 476 | my $path = $1; | ||
| 477 | if ($path =~ m{//}) { | ||
| 478 | print "malformed #include filename\n"; | ||
| 479 | print "$herecurr"; | ||
| 480 | $clean = 0; | ||
| 481 | } | ||
| 482 | # Sanitise this special form of string. | ||
| 483 | $path = 'X' x length($path); | ||
| 484 | $line =~ s{\<.*\>}{<$path>}; | ||
| 485 | } | ||
| 434 | 486 | ||
| 435 | # no C99 // comments | 487 | # no C99 // comments |
| 436 | if ($line =~ m{//}) { | 488 | if ($line =~ m{//}) { |
| @@ -441,47 +493,44 @@ sub process { | |||
| 441 | # Remove C99 comments. | 493 | # Remove C99 comments. |
| 442 | $line =~ s@//.*@@; | 494 | $line =~ s@//.*@@; |
| 443 | 495 | ||
| 444 | # Standardise the strings and chars within the input | ||
| 445 | # to simplify matching. | ||
| 446 | $line = sanitise_line($line); | ||
| 447 | |||
| 448 | #EXPORT_SYMBOL should immediately follow its function closing }. | 496 | #EXPORT_SYMBOL should immediately follow its function closing }. |
| 449 | if (($line =~ /EXPORT_SYMBOL.*\(.*\)/) || | 497 | if (($line =~ /EXPORT_SYMBOL.*\((.*)\)/) || |
| 450 | ($line =~ /EXPORT_UNUSED_SYMBOL.*\(.*\)/)) { | 498 | ($line =~ /EXPORT_UNUSED_SYMBOL.*\((.*)\)/)) { |
| 499 | my $name = $1; | ||
| 451 | if (($prevline !~ /^}/) && | 500 | if (($prevline !~ /^}/) && |
| 452 | ($prevline !~ /^\+}/) && | 501 | ($prevline !~ /^\+}/) && |
| 453 | ($prevline !~ /^ }/)) { | 502 | ($prevline !~ /^ }/) && |
| 454 | print "EXPORT_SYMBOL(func); should immediately follow its function\n"; | 503 | ($prevline !~ /\s$name(?:\s+$Attribute)?\s*(?:;|=)/)) { |
| 504 | print "EXPORT_SYMBOL(foo); should immediately follow its function/variable\n"; | ||
| 455 | print "$herecurr"; | 505 | print "$herecurr"; |
| 456 | $clean = 0; | 506 | $clean = 0; |
| 457 | } | 507 | } |
| 458 | } | 508 | } |
| 459 | 509 | ||
| 460 | # check for static initialisers. | 510 | # check for static initialisers. |
| 461 | if ($line=~/\s*static\s.*=\s+(0|NULL);/) { | 511 | if ($line=~/\s*static\s.*=\s+(0|NULL);/) { |
| 462 | print "do not initialise statics to 0 or NULL\n"; | 512 | print "do not initialise statics to 0 or NULL\n"; |
| 463 | print "$herecurr"; | 513 | print "$herecurr"; |
| 464 | $clean = 0; | 514 | $clean = 0; |
| 465 | } | 515 | } |
| 466 | 516 | ||
| 467 | # check for new typedefs. | 517 | # check for new typedefs, only function parameters and sparse annotations |
| 468 | if ($line=~/\s*typedef\s/) { | 518 | # make sense. |
| 519 | if ($line =~ /\btypedef\s/ && | ||
| 520 | $line !~ /\btypedef\s+$Type\s+\(\s*$Ident\s*\)\s*\(/ && | ||
| 521 | $line !~ /\b__bitwise(?:__|)\b/) { | ||
| 469 | print "do not add new typedefs\n"; | 522 | print "do not add new typedefs\n"; |
| 470 | print "$herecurr"; | 523 | print "$herecurr"; |
| 471 | $clean = 0; | 524 | $clean = 0; |
| 472 | } | 525 | } |
| 473 | 526 | ||
| 474 | # * goes on variable not on type | 527 | # * goes on variable not on type |
| 475 | my $type = '(?:char|short|int|long|unsigned|float|double|' . | ||
| 476 | 'struct\s+[A-Za-z\d_]+|' . | ||
| 477 | 'union\s+[A-Za-z\d_]+)'; | ||
| 478 | |||
| 479 | if ($line =~ m{[A-Za-z\d_]+(\*+) [A-Za-z\d_]+}) { | 528 | if ($line =~ m{[A-Za-z\d_]+(\*+) [A-Za-z\d_]+}) { |
| 480 | print "\"foo$1 bar\" should be \"foo $1bar\"\n"; | 529 | print "\"foo$1 bar\" should be \"foo $1bar\"\n"; |
| 481 | print "$herecurr"; | 530 | print "$herecurr"; |
| 482 | $clean = 0; | 531 | $clean = 0; |
| 483 | } | 532 | } |
| 484 | if ($line =~ m{$type (\*) [A-Za-z\d_]+} || | 533 | if ($line =~ m{$Type (\*) [A-Za-z\d_]+} || |
| 485 | $line =~ m{[A-Za-z\d_]+ (\*\*+) [A-Za-z\d_]+}) { | 534 | $line =~ m{[A-Za-z\d_]+ (\*\*+) [A-Za-z\d_]+}) { |
| 486 | print "\"foo $1 bar\" should be \"foo $1bar\"\n"; | 535 | print "\"foo $1 bar\" should be \"foo $1bar\"\n"; |
| 487 | print "$herecurr"; | 536 | print "$herecurr"; |
| @@ -530,13 +579,16 @@ sub process { | |||
| 530 | } | 579 | } |
| 531 | } | 580 | } |
| 532 | 581 | ||
| 533 | #function brace can't be on same line, except for #defines of do while, or if closed on same line | 582 | # function brace can't be on same line, except for #defines of do while, |
| 583 | # or if closed on same line | ||
| 534 | if (($line=~/[A-Za-z\d_]+\**\s+\**[A-Za-z\d_]+\(.*\).* {/) and | 584 | if (($line=~/[A-Za-z\d_]+\**\s+\**[A-Za-z\d_]+\(.*\).* {/) and |
| 535 | !($line=~/\#define.*do\s{/) and !($line=~/}/)) { | 585 | !($line=~/\#define.*do\s{/) and !($line=~/}/)) { |
| 536 | print "braces following function declarations go on the next line\n"; | 586 | print "braces following function declarations go on the next line\n"; |
| 537 | print "$herecurr"; | 587 | print "$herecurr"; |
| 538 | $clean = 0; | 588 | $clean = 0; |
| 539 | } | 589 | } |
| 590 | |||
| 591 | # Check operator spacing. | ||
| 540 | # Note we expand the line with the leading + as the real | 592 | # Note we expand the line with the leading + as the real |
| 541 | # line will be displayed with the leading + and the tabs | 593 | # line will be displayed with the leading + and the tabs |
| 542 | # will therefore also expand that way. | 594 | # will therefore also expand that way. |
| @@ -544,7 +596,6 @@ sub process { | |||
| 544 | $opline = expand_tabs($opline); | 596 | $opline = expand_tabs($opline); |
| 545 | $opline =~ s/^./ /; | 597 | $opline =~ s/^./ /; |
| 546 | if (!($line=~/\#\s*include/)) { | 598 | if (!($line=~/\#\s*include/)) { |
| 547 | # Check operator spacing. | ||
| 548 | my @elements = split(/(<<=|>>=|<=|>=|==|!=|\+=|-=|\*=|\/=|%=|\^=|\|=|&=|->|<<|>>|<|>|=|!|~|&&|\|\||,|\^|\+\+|--|;|&|\||\+|-|\*|\/\/|\/)/, $opline); | 599 | my @elements = split(/(<<=|>>=|<=|>=|==|!=|\+=|-=|\*=|\/=|%=|\^=|\|=|&=|->|<<|>>|<|>|=|!|~|&&|\|\||,|\^|\+\+|--|;|&|\||\+|-|\*|\/\/|\/)/, $opline); |
| 549 | my $off = 0; | 600 | my $off = 0; |
| 550 | for (my $n = 0; $n < $#elements; $n += 2) { | 601 | for (my $n = 0; $n < $#elements; $n += 2) { |
| @@ -572,8 +623,8 @@ sub process { | |||
| 572 | # Pick up the preceeding and succeeding characters. | 623 | # Pick up the preceeding and succeeding characters. |
| 573 | my $ca = substr($opline, $off - 1, 1); | 624 | my $ca = substr($opline, $off - 1, 1); |
| 574 | my $cc = ''; | 625 | my $cc = ''; |
| 575 | if (length($opline) > ($off + length($elements[$n]))) { | 626 | if (length($opline) >= ($off + length($elements[$n + 1]))) { |
| 576 | $cc = substr($opline, $off + 1 + length($elements[$n]), 1); | 627 | $cc = substr($opline, $off + length($elements[$n + 1]), 1); |
| 577 | } | 628 | } |
| 578 | 629 | ||
| 579 | my $ctx = "${a}x${c}"; | 630 | my $ctx = "${a}x${c}"; |
| @@ -598,7 +649,7 @@ sub process { | |||
| 598 | 649 | ||
| 599 | # , must have a space on the right. | 650 | # , must have a space on the right. |
| 600 | } elsif ($op eq ',') { | 651 | } elsif ($op eq ',') { |
| 601 | if ($ctx !~ /.xW|.xE/) { | 652 | if ($ctx !~ /.xW|.xE/ && $cc ne '}') { |
| 602 | print "need space after that '$op' $at\n"; | 653 | print "need space after that '$op' $at\n"; |
| 603 | print "$hereptr"; | 654 | print "$hereptr"; |
| 604 | $clean = 0; | 655 | $clean = 0; |
| @@ -619,11 +670,16 @@ sub process { | |||
| 619 | 670 | ||
| 620 | # unary ++ and unary -- are allowed no space on one side. | 671 | # unary ++ and unary -- are allowed no space on one side. |
| 621 | } elsif ($op eq '++' or $op eq '--') { | 672 | } elsif ($op eq '++' or $op eq '--') { |
| 622 | if ($ctx !~ /[WOB]x[^W]|[^W]x[WOB]/) { | 673 | if ($ctx !~ /[WOB]x[^W]/ && $ctx !~ /[^W]x[WOB]/) { |
| 623 | print "need space one side of that '$op' $at\n"; | 674 | print "need space one side of that '$op' $at\n"; |
| 624 | print "$hereptr"; | 675 | print "$hereptr"; |
| 625 | $clean = 0; | 676 | $clean = 0; |
| 626 | } | 677 | } |
| 678 | if ($ctx =~ /Wx./ && $cc eq ';') { | ||
| 679 | print "no space before that '$op' $at\n"; | ||
| 680 | print "$hereptr"; | ||
| 681 | $clean = 0; | ||
| 682 | } | ||
| 627 | 683 | ||
| 628 | # & is both unary and binary | 684 | # & is both unary and binary |
| 629 | # unary: | 685 | # unary: |
| @@ -656,7 +712,7 @@ sub process { | |||
| 656 | print "$hereptr"; | 712 | print "$hereptr"; |
| 657 | $clean = 0; | 713 | $clean = 0; |
| 658 | } | 714 | } |
| 659 | } elsif ($ctx !~ /VxV|[EW]x[WE]|[EWB]x[VO]|OxV|WxB/) { | 715 | } elsif ($ctx !~ /VxV|[EW]x[WE]|[EWB]x[VO]|OxV|WxB|BxB/) { |
| 660 | print "need space before that '$op' $at\n"; | 716 | print "need space before that '$op' $at\n"; |
| 661 | print "$hereptr"; | 717 | print "$hereptr"; |
| 662 | $clean = 0; | 718 | $clean = 0; |
| @@ -705,9 +761,9 @@ sub process { | |||
| 705 | } | 761 | } |
| 706 | 762 | ||
| 707 | # Check for illegal assignment in if conditional. | 763 | # Check for illegal assignment in if conditional. |
| 708 | if ($line=~/\b(if|while)\s*\(.*[^<>!=]=[^=].*\)/) { | 764 | if ($line=~/\bif\s*\(.*[^<>!=]=[^=].*\)/) { |
| 709 | #next if ($line=~/\".*\Q$op\E.*\"/ or $line=~/\'\Q$op\E\'/); | 765 | #next if ($line=~/\".*\Q$op\E.*\"/ or $line=~/\'\Q$op\E\'/); |
| 710 | print "do not use assignment in condition\n"; | 766 | print "do not use assignment in if condition\n"; |
| 711 | print "$herecurr"; | 767 | print "$herecurr"; |
| 712 | $clean = 0; | 768 | $clean = 0; |
| 713 | } | 769 | } |
| @@ -735,8 +791,8 @@ sub process { | |||
| 735 | $clean = 0; | 791 | $clean = 0; |
| 736 | } | 792 | } |
| 737 | 793 | ||
| 738 | #warn if <asm/foo.h> is #included and <linux/foo.h> is available. | 794 | #warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line) |
| 739 | if ($tree && $line =~ qr|\s*\#\s*include\s*\<asm\/(.*)\.h\>|) { | 795 | if ($tree && $rawline =~ m{^.\#\s*include\s*\<asm\/(.*)\.h\>}) { |
| 740 | my $checkfile = "include/linux/$1.h"; | 796 | my $checkfile = "include/linux/$1.h"; |
| 741 | if (-f $checkfile) { | 797 | if (-f $checkfile) { |
| 742 | print "Use #include <linux/$1.h> instead of <asm/$1.h>\n"; | 798 | print "Use #include <linux/$1.h> instead of <asm/$1.h>\n"; |
| @@ -745,7 +801,8 @@ sub process { | |||
| 745 | } | 801 | } |
| 746 | } | 802 | } |
| 747 | 803 | ||
| 748 | #if/while/etc brace do not go on next line, unless #defining a do while loop, or if that brace on the next line is for something else | 804 | # if/while/etc brace do not go on next line, unless defining a do while loop, |
| 805 | # or if that brace on the next line is for something else | ||
| 749 | if ($prevline=~/\b(if|while|for|switch)\s*\(/) { | 806 | if ($prevline=~/\b(if|while|for|switch)\s*\(/) { |
| 750 | my @opened = $prevline=~/\(/g; | 807 | my @opened = $prevline=~/\(/g; |
| 751 | my @closed = $prevline=~/\)/g; | 808 | my @closed = $prevline=~/\)/g; |
| @@ -767,25 +824,36 @@ sub process { | |||
| 767 | } | 824 | } |
| 768 | 825 | ||
| 769 | if (($prevline=~/\b(if|while|for|switch)\s*\(.*\)\s*$/) and ($next_line=~/{/) and | 826 | if (($prevline=~/\b(if|while|for|switch)\s*\(.*\)\s*$/) and ($next_line=~/{/) and |
| 770 | !($next_line=~/\b(if|while|for)/) and !($next_line=~/\#define.*do.*while/)) { | 827 | !($next_line=~/\b(if|while|for|switch)/) and !($next_line=~/\#define.*do.*while/)) { |
| 771 | print "That { should be on the previous line\n"; | 828 | print "That { should be on the previous line\n"; |
| 772 | print "$here\n$display_segment\n$next_line\n\n"; | 829 | print "$here\n$display_segment\n$next_line\n\n"; |
| 773 | $clean = 0; | 830 | $clean = 0; |
| 774 | } | 831 | } |
| 775 | } | 832 | } |
| 776 | 833 | ||
| 777 | #multiline macros should be enclosed in a do while loop | 834 | # multi-statement macros should be enclosed in a do while loop, grab the |
| 778 | if (($prevline=~/\#define.*\\/) and !($prevline=~/do\s+{/) and | 835 | # first statement and ensure its the whole macro if its not enclosed |
| 779 | !($prevline=~/\(\{/) and ($line=~/;\s*\\/) and | 836 | # in a known goot container |
| 780 | !($line=~/do.*{/) and !($line=~/\(\{/)) { | 837 | if (($prevline=~/\#define.*\\/) and |
| 781 | print "Macros with multiple statements should be enclosed in a do - while loop\n"; | 838 | !($prevline=~/do\s+{/) and !($prevline=~/\(\{/) and |
| 782 | print "$hereprev"; | 839 | !($line=~/do.*{/) and !($line=~/\(\{/) and |
| 783 | $clean = 0; | 840 | !($line=~/^.\s*$Declare\s/)) { |
| 841 | # Grab the first statement, if that is the entire macro | ||
| 842 | # its ok. This may start either on the #define line | ||
| 843 | # or the one below. | ||
| 844 | my $ctx1 = join('', ctx_statement($linenr - 1, $realcnt + 1)); | ||
| 845 | my $ctx2 = join('', ctx_statement($linenr, $realcnt)); | ||
| 846 | |||
| 847 | if ($ctx1 =~ /\\$/ && $ctx2 =~ /\\$/) { | ||
| 848 | print "Macros with multiple statements should be enclosed in a do - while loop\n"; | ||
| 849 | print "$hereprev"; | ||
| 850 | $clean = 0; | ||
| 851 | } | ||
| 784 | } | 852 | } |
| 785 | 853 | ||
| 786 | # don't include deprecated include files | 854 | # don't include deprecated include files (uses RAW line) |
| 787 | for my $inc (@dep_includes) { | 855 | for my $inc (@dep_includes) { |
| 788 | if ($line =~ m@\#\s*include\s*\<$inc>@) { | 856 | if ($rawline =~ m@\#\s*include\s*\<$inc>@) { |
| 789 | print "Don't use <$inc>: see Documentation/feature-removal-schedule.txt\n"; | 857 | print "Don't use <$inc>: see Documentation/feature-removal-schedule.txt\n"; |
| 790 | print "$herecurr"; | 858 | print "$herecurr"; |
| 791 | $clean = 0; | 859 | $clean = 0; |
| @@ -845,6 +913,13 @@ sub process { | |||
| 845 | print "$herecurr"; | 913 | print "$herecurr"; |
| 846 | $clean = 0; | 914 | $clean = 0; |
| 847 | } | 915 | } |
| 916 | |||
| 917 | if ($line =~ /$Type\s+(?:inline|__always_inline)\b/ || | ||
| 918 | $line =~ /\b(?:inline|always_inline)\s+$Storage/) { | ||
| 919 | print "inline keyword should sit between storage class and type\n"; | ||
| 920 | print "$herecurr"; | ||
| 921 | $clean = 0; | ||
| 922 | } | ||
| 848 | } | 923 | } |
| 849 | 924 | ||
| 850 | if ($chk_patch && !$is_patch) { | 925 | if ($chk_patch && !$is_patch) { |
