diff options
| author | Gregory Bean <gbean@codeaurora.org> | 2011-05-11 09:11:12 -0700 |
|---|---|---|
| committer | Stephen Boyd <sboyd@codeaurora.org> | 2013-09-04 14:18:05 -0700 |
| commit | bd51a4b61f5c12201c1a34c88d61bcd6df15682b (patch) | |
| tree | d9c5adf0e4871b51a6fa2761cd11a5daab8fe9c2 | |
| parent | 7595111dc67b26c95283712c9564d0b642d9e097 (diff) | |
checkpatch: Handle long multi-line macros better.
Improve parsing of multiline macros which run beyond the available
diff context. These beyond-the-horizon macros previously caused
two distinct naughty behaviors:
- The scanner, confused by the trailing backslash, would grab
the header of the next context hunk and treat it as the last
line of the preceding macro.
- The analyzer, unable to fully reduce the macro, would blame
the patch for submitting an unbalanced or unprotected macro.
Change-Id: I6b7dd3d577c524d30b59dff7b20393bb5135f16d
Signed-off-by: Gregory Bean <gbean@codeaurora.org>
(cherry picked from commit ddd028c47b4d91aa9c0e97445eb584b2de367769)
| -rwxr-xr-x | scripts/checkpatch.pl | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index b80756a9331..9d02d7b58a2 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -3075,7 +3075,7 @@ sub process { if ($realfile !~ m@/vmlinux.lds.h$@ && $line =~ /^.\s*\#\s*define\s*$Ident(\()?/) { my $ln = $linenr; - my $cnt = $realcnt; + my $cnt = $realcnt - 1; my ($off, $dstat, $dcond, $rest); my $ctx = ''; ($dstat, $dcond, $ln, $cnt, $off) = @@ -3097,6 +3097,12 @@ sub process { { } + # Extremely long macros may fall off the end of the + # available context without closing. Give a dangling + # backslash the benefit of the doubt and allow it + # to gobble any hanging open-parens. + $dstat =~ s/\(.+\\$/1/; + # Flatten any obvious string concatentation. while ($dstat =~ s/("X*")\s*$Ident/$1/ || $dstat =~ s/$Ident\s*("X*")/$1/) |
