Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c77f1b0e authored by Gregory Bean's avatar Gregory Bean Committed by Bryan Huntsman
Browse files

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: default avatarGregory Bean <gbean@codeaurora.org>
(cherry picked from commit ddd028c47b4d91aa9c0e97445eb584b2de367769)
Signed-off-by: default avatarStepan Moskovchenko <stepanm@codeaurora.org>
Signed-off-by: default avatarRishabh Bhatnagar <rishabhb@codeaurora.org>
parent 58794009
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -4923,7 +4923,7 @@ sub process {
		if ($realfile !~ m@/vmlinux.lds.h$@ &&
		if ($realfile !~ m@/vmlinux.lds.h$@ &&
		    $line =~ /^.\s*\#\s*define\s*$Ident(\()?/) {
		    $line =~ /^.\s*\#\s*define\s*$Ident(\()?/) {
			my $ln = $linenr;
			my $ln = $linenr;
			my $cnt = $realcnt;
			my $cnt = $realcnt - 1;
			my ($off, $dstat, $dcond, $rest);
			my ($off, $dstat, $dcond, $rest);
			my $ctx = '';
			my $ctx = '';
			my $has_flow_statement = 0;
			my $has_flow_statement = 0;
@@ -4960,6 +4960,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.
			# Flatten any obvious string concatentation.
			while ($dstat =~ s/($String)\s*$Ident/$1/ ||
			while ($dstat =~ s/($String)\s*$Ident/$1/ ||
			       $dstat =~ s/$Ident\s*($String)/$1/)
			       $dstat =~ s/$Ident\s*($String)/$1/)