type: simplify get_binop_type()
[smatch.git] / smatch_scripts / generisize.pl
blob73dd7c284251275a8bcc095b027c95e40f006c6d
1 #!/usr/bin/perl
3 use strict;
5 sub help()
7 print "usage: $0 [-r]\n";
8 print "Counts the number of errors of each type.\n";
9 print "-r means down to the nearest 10.\n";
10 exit 1;
13 my $round;
14 my $arg = shift;
15 if ($arg =~ /-h/) {
16 help();
17 } elsif ($arg =~ /-r/) {
18 $round = 1;
21 my %msgs;
23 sub add_msg($)
25 my $msg = shift;
27 if (defined $msgs{$msg}) {
28 $msgs{$msg}++;
29 } else {
30 $msgs{$msg} = 1;
34 while (<>) {
35 s/^.*?:\d+(|:\d+:) .*? //;
36 s/[01234567890]//g;
37 if ($_ =~ /can't/) {
38 s/(.*can't.*').*?('.*)/$1 $2/;
39 } elsif ($_ =~ /don't/) {
40 s/(.*don't.*').*?('.*)/$1 $2/;
41 } else {
42 s/'.*?'/''/g;
44 s/,//g;
45 s/\(\w+ returns null\)/(... returns null)/;
46 s/dma on the stack \(.*?\)/dma on the stack (...)/;
47 s/possible ERR_PTR '' to .*/possible ERR_PTR '' to .../;
48 s/inconsistent returns ([^ ]+?) locked \(\)/inconsistent returns ... locked ()/;
49 s/(.*) [^ ]* (too large for) [^ ]+ (.*)/$1 $2 $3/;
51 add_msg($_);
54 foreach my $key (sort { $msgs{$b} <=> $msgs{$a} } keys %msgs) {
55 my $count = $msgs{$key};
57 if ($round) {
58 $count = $msgs{$key} - $msgs{$key} % 10;
60 print "$count $key";