#!/usr/bin/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 emits the errors which we
# expect.  Usage: errchk COMPILER [OPTS] SOURCEFILE.  This will run
# the command COMPILER [OPTS] SOURCEFILE.  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
# SOURCEFILE.  For each line of the source file 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
# commnt, 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 <regexp>.  The <regexp> syntax
# is Perl but its best to stick to egrep.

use POSIX;

if(@ARGV < 1) {
	print STDERR "Usage: errchk COMPILER [OPTS] SOURCEFILE\n";
	exit 1;
}

$file = $ARGV[@ARGV-1];
open(SRC, $file) || die "BUG: errchk: open $file: $!";
@src = <SRC>;
close(SRC);

# Run command
$cmd = join(' ', @ARGV);
open(CMD, "exec $cmd </dev/null 2>&1 |") || die "BUG: errchk: run $cmd: $!";
@out = grep { !/^	/ } <CMD>;
close CMD;

if($? == 0) {
	print STDERR "BUG: errchk: command succeeded 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: ";
	}
}

$line = 0;
foreach $src (@src) {
	$line++;
	next unless $src =~ m|// ERROR (.*)|;
	$regexp = $1;
	if($regexp !~ /^"([^"]*)"/) {
		print STDERR "$file:$line: malformed regexp\n";
		next;
	}
	$regexp = $1;

	@errmsg = grep { /$file:$line:/ } @out;
	@out = grep { !/$file:$line:/ } @out;
	if(@errmsg == 0) {
		bug();
		print STDERR "errchk: $file:$line: missing expected error: '$regexp'\n";
		next;
	}
	@match = grep { /$regexp/ } @errmsg;
	if(@match == 0) {
		bug();
		print STDERR "errchk: $file:$line: error message does not match '$regexp'\n";
		next;
	}
}

if(@out != 0) {
	bug();
	print STDERR "errchk: $file: unmatched error messages:\n";
	print STDERR "==================================================\n";
	print STDERR @out;
	print STDERR "==================================================\n";
}

exit 0;
