Commit 01464f30 authored by Andy Whitcroft's avatar Andy Whitcroft Committed by Linus Torvalds
Browse files

checkpatch: statement/block context analyser should look at sanitised lines



When tracking context to find a block or statement we need to use the
sanitised lines, else perentheses '(' & ')' and braces '{' & '}' can throw
the scanner out.  Also fix up a couple of error outputs which include
those sanitised lines incorrectly.
Signed-off-by: default avatarAndy Whitcroft <apw@canonical.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3cbf62df
...@@ -691,15 +691,15 @@ sub ctx_block_get { ...@@ -691,15 +691,15 @@ sub ctx_block_get {
$blk .= $rawlines[$line]; $blk .= $rawlines[$line];
# Handle nested #if/#else. # Handle nested #if/#else.
if ($rawlines[$line] =~ /^.\s*#\s*(?:ifndef|ifdef|if)\s/) { if ($lines[$line] =~ /^.\s*#\s*(?:ifndef|ifdef|if)\s/) {
push(@stack, $level); push(@stack, $level);
} elsif ($rawlines[$line] =~ /^.\s*#\s*(?:else|elif)\b/) { } elsif ($lines[$line] =~ /^.\s*#\s*(?:else|elif)\b/) {
$level = $stack[$#stack - 1]; $level = $stack[$#stack - 1];
} elsif ($rawlines[$line] =~ /^.\s*#\s*endif\b/) { } elsif ($lines[$line] =~ /^.\s*#\s*endif\b/) {
$level = pop(@stack); $level = pop(@stack);
} }
foreach my $c (split(//, $rawlines[$line])) { foreach my $c (split(//, $lines[$line])) {
##print "C<$c>L<$level><$open$close>O<$off>\n"; ##print "C<$c>L<$level><$open$close>O<$off>\n";
if ($off > 0) { if ($off > 0) {
$off--; $off--;
...@@ -1652,7 +1652,7 @@ sub process { ...@@ -1652,7 +1652,7 @@ sub process {
if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) { if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) {
ERROR("that open brace { should be on the previous line\n" . ERROR("that open brace { should be on the previous line\n" .
"$here\n$ctx\n$lines[$ctx_ln - 1]\n"); "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
} }
if ($level == 0 && $pre_ctx !~ /}\s*while\s*\($/ && if ($level == 0 && $pre_ctx !~ /}\s*while\s*\($/ &&
$ctx =~ /\)\s*\;\s*$/ && $ctx =~ /\)\s*\;\s*$/ &&
...@@ -1661,7 +1661,7 @@ sub process { ...@@ -1661,7 +1661,7 @@ sub process {
my ($nlength, $nindent) = line_stats($lines[$ctx_ln - 1]); my ($nlength, $nindent) = line_stats($lines[$ctx_ln - 1]);
if ($nindent > $indent) { if ($nindent > $indent) {
WARN("trailing semicolon indicates no statements, indent implies otherwise\n" . WARN("trailing semicolon indicates no statements, indent implies otherwise\n" .
"$here\n$ctx\n$lines[$ctx_ln - 1]\n"); "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
} }
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment