diff --git a/test/errchk b/test/errchk deleted file mode 100755 index 1cb57bb961c..00000000000 --- a/test/errchk +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env perl -# Copyright 2009 The Go Authors. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -# This script checks that the compilers emit the errors which we expect. -# Usage: errchk COMPILER [OPTS] SOURCEFILES. This will run the command -# COMPILER [OPTS] SOURCEFILES. The compilation is expected to fail; if -# it succeeds, this script will report an error. The stderr output of -# the compiler will be matched against comments in SOURCEFILES. For each -# line of the source files which should generate an error, there should -# be a comment of the form // ERROR "regexp". If the compiler generates -# an error for a line which has no such comment, this script will report -# an error. Likewise if the compiler does not generate an error for a -# line which has a comment, or if the error message does not match the -# . The syntax is Perl but its best to stick to egrep. - -use POSIX; - -my $exitcode = 1; - -if(@ARGV >= 1 && $ARGV[0] eq "-0") { - $exitcode = 0; - shift; -} - -if(@ARGV < 1) { - print STDERR "Usage: errchk COMPILER [OPTS] SOURCEFILES\n"; - exit 1; -} - -# Grab SOURCEFILES -foreach(reverse 0 .. @ARGV-1) { - unless($ARGV[$_] =~ /\.(go|s)$/) { - @file = @ARGV[$_+1 .. @ARGV-1]; - last; - } -} - -# If no files have been specified try to grab SOURCEFILES from the last -# argument that is an existing directory if any -unless(@file) { - foreach(reverse 0 .. @ARGV-1) { - if(-d $ARGV[$_]) { - @file = glob($ARGV[$_] . "/*.go"); - last; - } - } -} - -foreach $file (@file) { - open(SRC, $file) || die "BUG: errchk: open $file: $!"; - $src{$file} = []; - close(SRC); -} - -# Run command -$cmd = join(' ', @ARGV); -open(CMD, "exec $cmd &1 |") || die "BUG: errchk: run $cmd: $!"; - -# gc error messages continue onto additional lines with leading tabs. -# Split the output at the beginning of each line that doesn't begin with a tab. -$out = join('', ); -@out = split(/^(?!\t)/m, $out); - -close CMD; - -# Remove lines beginning with #, printed by go command to indicate package. -@out = grep {!/^#/} @out; - -if($exitcode != 0 && $? == 0) { - print STDERR "BUG: errchk: command succeeded unexpectedly\n"; - print STDERR @out; - exit 0; -} - -if($exitcode == 0 && $? != 0) { - print STDERR "BUG: errchk: command failed unexpectedly\n"; - print STDERR @out; - exit 0; -} - -if(!WIFEXITED($?)) { - print STDERR "BUG: errchk: compiler crashed\n"; - print STDERR @out, "\n"; - exit 0; -} - -sub bug() { - if(!$bug++) { - print STDERR "BUG: "; - } -} - -sub chk { - my $file = shift; - my $line = 0; - my $regexp; - my @errmsg; - my @match; - foreach my $src (@{$src{$file}}) { - $line++; - next if $src =~ m|////|; # double comment disables ERROR - next unless $src =~ m|// (GC_)?ERROR (.*)|; - my $all = $2; - if($all !~ /^"([^"]*)"/) { - print STDERR "$file:$line: malformed regexp\n"; - next; - } - @errmsg = grep { /$file:$line[:[]/ } @out; - @out = grep { !/$file:$line[:[]/ } @out; - if(@errmsg == 0) { - bug(); - print STDERR "errchk: $file:$line: missing expected error: '$all'\n"; - next; - } - foreach my $regexp ($all =~ /"([^"]*)"/g) { - # Turn relative line number in message into absolute line number. - if($regexp =~ /LINE(([+-])([0-9]+))?/) { - my $n = $line; - if(defined($1)) { - if($2 eq "+") { - $n += int($3); - } else { - $n -= int($3); - } - } - $regexp = "$`$file:$n$'"; - } - - @match = grep { /$regexp/ } @errmsg; - if(@match == 0) { - bug(); - print STDERR "errchk: $file:$line: error messages do not match '$regexp'\n"; - next; - } - @errmsg = grep { !/$regexp/ } @errmsg; - } - if(@errmsg != 0) { - bug(); - print STDERR "errchk: $file:$line: unmatched error messages:\n"; - foreach my $l (@errmsg) { - print STDERR "> $l"; - } - } - } -} - -foreach $file (@file) { - chk($file) -} - -if(@out != 0) { - bug(); - print STDERR "errchk: unmatched error messages:\n"; - print STDERR "==================================================\n"; - print STDERR @out; - print STDERR "==================================================\n"; -} - -exit 0;