tools/summarise_gcc_errors.pl
changeset 7 8c4a7869f673
parent 3 5578c2bec847
child 8 c38b26fd0c68
equal deleted inserted replaced
6:2618a0f10e3e 7:8c4a7869f673
    49   {
    49   {
    50   Usage("Invalid argument");
    50   Usage("Invalid argument");
    51   }
    51   }
    52 
    52 
    53 my $current_package = ""; 
    53 my $current_package = ""; 
       
    54 my $saved_filename = "";
    54 my %files;
    55 my %files;
    55 my %errors_by_file;
    56 my %errors_by_file;
    56 my %error_count_by_file;
    57 my %error_count_by_file;
    57 my %errors;
    58 my %errors;
    58 my %message_ids;
    59 my %message_ids;
    89 		my $filename = $1;
    90 		my $filename = $1;
    90 		my $lineno = $2;
    91 		my $lineno = $2;
    91 		my $messagetype = $3;
    92 		my $messagetype = $3;
    92 		my $message = $4;
    93 		my $message = $4;
    93 		
    94 		
       
    95 		# Heuristic for guessing the problem file for assembler issues
       
    96 		# 
       
    97 		if ($filename =~ /\\TEMP\\/i)
       
    98 			{
       
    99 			$filename = $saved_filename;
       
   100 			$lineno = 0;
       
   101 			}
       
   102 		else
       
   103 			{
       
   104 			$saved_filename = $filename;
       
   105 			}
       
   106 		
    94 		if ($messagetype eq "note")
   107 		if ($messagetype eq "note")
    95 			{
   108 			{
    96 			next;		# ignore notes
   109 			next;		# ignore notes
    97 			}
   110 			}
    98 		if ($messagetype eq "warning" && !$warnings)
   111 		if ($messagetype eq "warning" && !$warnings)
    99 			{
   112 			{
   100 			next;		# ignore warnings
   113 			next;		# ignore warnings
       
   114 			}
       
   115 		if ($message =~ /.*: No such file/ && !$warnings)
       
   116 			{
       
   117 			next;		# ignore "no such file", as these aren't likely to be GCC-specific
   101 			}
   118 			}
   102 		
   119 		
   103 		$filename =~ s/^.://;		# remove drive letter
   120 		$filename =~ s/^.://;		# remove drive letter
   104 		
   121 		
   105 		$message =~ s/&/&/g;
   122 		$message =~ s/&/&/g;
   108 		$message =~ s/'/'/g;
   125 		$message =~ s/'/'/g;
   109 		my $generic_message = "$messagetype: $message";
   126 		my $generic_message = "$messagetype: $message";
   110 		$generic_message =~ s/'offsetof'/"offsetof"/;
   127 		$generic_message =~ s/'offsetof'/"offsetof"/;
   111 		$generic_message =~ s/'([^a-zA-Z])'/"\1"/g;	# don't catch ';' in next substitution
   128 		$generic_message =~ s/'([^a-zA-Z])'/"\1"/g;	# don't catch ';' in next substitution
   112 		$generic_message =~ s/['`][^']+'/XX/g;	# suppress quoted bits of the actual instance
   129 		$generic_message =~ s/['`][^']+'/XX/g;	# suppress quoted bits of the actual instance
       
   130 		$generic_message =~ s/pasting ""(.*)"" and ""(.*)""/pasting XX and YY/g;	# suppress detail of "pasting" error
   113 		
   131 		
   114 		my $message_id = $next_message_id;
   132 		my $message_id = $next_message_id;
   115 		if (!defined $message_ids{$generic_message})
   133 		if (!defined $message_ids{$generic_message})
   116 			{
   134 			{
   117 			$next_message_id++;
   135 			$next_message_id++;