summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorAlex Dowad <alexinbeijing@gmail.com>2015-06-25 18:02:52 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-06-25 20:00:41 -0400
commit485ff23ed2575e9d479f45227749cbbcd5df3e19 (patch)
tree99e68704fe96b71ad203164f651e92408454f9cd /scripts
parente6176fa4728fb6df4f66c3e9c08736c369e71f75 (diff)
checkpatch: make types found in a source file/patch local
checkpatch uses various cues in its input patches and files to discover the names of user-defined types and modifiers. It then uses that information when processing expressions to discover potential style issues. Unfortunately, in rare cases, this means that checkpatch may give different results if you run it on several input files in one execution, or one by one! The reason is that it may identify a type (or something that looks like a type) in one file, and then carry this information over when processing a different file. For example, drivers/staging/media/bcm2048/radio-bcm2048.c contains this line (in a macro): size value; and drivers/staging/media/davinci_vpfe/vpfe_video.c has this line: while (size * *nbuffers > vpfe_dev->video_limit) If checkpatch processes these 2 files in a single command like: ./scripts/checkpatch.pl -f $file1 $file2 the (spurious) "size" type detected in the first file will cause it to flag the second file for improper use of the pointer dereference operator. To fix this, store types and modifiers found in a file in separate arrays from built-in ones, and reset the arrays of types and modifiers found in files at the beginning of each new source file. Signed-off-by: Alex Dowad <alexinbeijing@gmail.com> Signed-off-by: Joe Perches <joe@perches.com> Acked-by: 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-xscripts/checkpatch.pl13
1 files changed, 9 insertions, 4 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index f7f222a1e908..e46414dce05f 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -423,6 +423,7 @@ our @typeList = (
423 qr{${Ident}_handler_fn}, 423 qr{${Ident}_handler_fn},
424 @typeListMisordered, 424 @typeListMisordered,
425); 425);
426our @typeListFile = ();
426our @typeListWithAttr = ( 427our @typeListWithAttr = (
427 @typeList, 428 @typeList,
428 qr{struct\s+$InitAttribute\s+$Ident}, 429 qr{struct\s+$InitAttribute\s+$Ident},
@@ -432,6 +433,7 @@ our @typeListWithAttr = (
432our @modifierList = ( 433our @modifierList = (
433 qr{fastcall}, 434 qr{fastcall},
434); 435);
436our @modifierListFile = ();
435 437
436our @mode_permission_funcs = ( 438our @mode_permission_funcs = (
437 ["module_param", 3], 439 ["module_param", 3],
@@ -515,8 +517,8 @@ if ($codespell) {
515$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix; 517$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
516 518
517sub build_types { 519sub build_types {
518 my $mods = "(?x: \n" . join("|\n ", @modifierList) . "\n)"; 520 my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";
519 my $all = "(?x: \n" . join("|\n ", @typeList) . "\n)"; 521 my $all = "(?x: \n" . join("|\n ", (@typeList, @typeListFile)) . "\n)";
520 my $Misordered = "(?x: \n" . join("|\n ", @typeListMisordered) . "\n)"; 522 my $Misordered = "(?x: \n" . join("|\n ", @typeListMisordered) . "\n)";
521 my $allWithAttr = "(?x: \n" . join("|\n ", @typeListWithAttr) . "\n)"; 523 my $allWithAttr = "(?x: \n" . join("|\n ", @typeListWithAttr) . "\n)";
522 $Modifier = qr{(?:$Attribute|$Sparse|$mods)}; 524 $Modifier = qr{(?:$Attribute|$Sparse|$mods)};
@@ -748,6 +750,9 @@ for my $filename (@ARGV) {
748 @fixed_inserted = (); 750 @fixed_inserted = ();
749 @fixed_deleted = (); 751 @fixed_deleted = ();
750 $fixlinenr = -1; 752 $fixlinenr = -1;
753 @modifierListFile = ();
754 @typeListFile = ();
755 build_types();
751} 756}
752 757
753exit($exit); 758exit($exit);
@@ -1612,13 +1617,13 @@ sub possible {
1612 for my $modifier (split(' ', $possible)) { 1617 for my $modifier (split(' ', $possible)) {
1613 if ($modifier !~ $notPermitted) { 1618 if ($modifier !~ $notPermitted) {
1614 warn "MODIFIER: $modifier ($possible) ($line)\n" if ($dbg_possible); 1619 warn "MODIFIER: $modifier ($possible) ($line)\n" if ($dbg_possible);
1615 push(@modifierList, $modifier); 1620 push(@modifierListFile, $modifier);
1616 } 1621 }
1617 } 1622 }
1618 1623
1619 } else { 1624 } else {
1620 warn "POSSIBLE: $possible ($line)\n" if ($dbg_possible); 1625 warn "POSSIBLE: $possible ($line)\n" if ($dbg_possible);
1621 push(@typeList, $possible); 1626 push(@typeListFile, $possible);
1622 } 1627 }
1623 build_types(); 1628 build_types();
1624 } else { 1629 } else {