expressions: make assign_expression() take an op argument
[smatch.git] / smatch_scripts / generisize.pl
blob8132ed296b96d712c59bd728cfb61402a454fe06
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/[us](16|32|64)(min|max)//g;
37 s/0x\w+//g;
38 s/[01234567890]//g;
39 if ($_ =~ /can't/) {
40 s/(.*can't.*').*?('.*)/$1 $2/;
41 s/(.*?)'.*?'(.*can't.*)/$1 $2/;
42 } elsif ($_ =~ /don't/) {
43 s/(.*don't.*').*?('.*)/$1 $2/;
44 } else {
45 s/'.*?'/''/g;
47 s/,//g;
48 s/\(\w+ returns null\)/(... returns null)/;
49 s/dma on the stack \(.*?\)/dma on the stack (...)/;
50 s/possible ERR_PTR '' to .*/possible ERR_PTR '' to .../;
51 s/inconsistent returns ([^ ]+?) locked \(\)/inconsistent returns ... locked ()/;
52 s/(.*) [^ ]* (too large for) [^ ]+ (.*)/$1 $2 $3/;
54 add_msg($_);
57 foreach my $key (sort { $msgs{$b} <=> $msgs{$a} } keys %msgs) {
58 my $count = $msgs{$key};
60 if ($round) {
61 $count = $msgs{$key} - $msgs{$key} % 10;
63 print "$count $key";