#!/bin/bash
# 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> is
# interpreted by egrep.

if test $# -lt 2; then
  echo 1>&2 "Usage: errchk COMPILER [OPTS] SOURCEFILE"
  exit 1
fi

ARGCOUNT=$#
SOURCEFILE=${!ARGCOUNT}

TMPOUT=/tmp/errchk-out-$$
TMPERR=/tmp/errchk-err-$$
TMPALL=/tmp/errchk-all-$$
TMPTMP=/tmp/errchk-tmp-$$
TMPSTAT=/tmp/errchk-stat-$$
TMPBUG=/tmp/errchk-bug-$$

rm -f $TMPOUT $TMPERR $TMPALL $TMPTMP $TMPSTAT $TMPBUG

trap "rm -f $TMPOUT $TMPERR $TMPALL $TMPTMP $TMPSTAT $TMPBUG" 0 1 2 3 14 15

if $* >$TMPOUT 2>$TMPERR; then
  echo 1>&2 "BUG: errchk: command succeeded unexpectedly"
  cat $TMPOUT
  cat 1>&2 $TMPERR
  rm -f $TMPOUT $TMPERR
  exit 1
fi

cat $TMPOUT $TMPERR | grep -v '^	' > $TMPALL

bug() {
  if ! test -f $TMPBUG
  then
    echo 1>&2 -n BUG: ''
    echo >$TMPBUG
  fi
}

header=0
echo 0 > $TMPSTAT
pr -n -t $SOURCEFILE | grep '// ERROR' | while read line; do
  lineno=`echo $line | sed -e 's/^[ ]*\([0-9]*\).*$/\1/'`
  regexp=`echo $line | sed -e 's|.*// ERROR "\([^"]*\)".*$|\1|'`
  errmsg=`grep "$SOURCEFILE:$lineno" <$TMPALL`
  grep -v "$SOURCEFILE:$lineno" < $TMPALL > $TMPTMP
  mv -f $TMPTMP $TMPALL
  if test -z "$errmsg"; then
    bug
    echo 1>&2 "errchk: $SOURCEFILE:$lineno: missing expected error: '$regexp'"
    echo 1 > $TMPSTAT
  elif ! echo "$errmsg" | egrep -q "$regexp"; then
    bug
    echo 1>&2 "errchk: $SOURCEFILE:$lineno: error message does not match '$regexp'"
    echo 1>&2 $errmsg
    echo 1 > $TMPSTAT
  fi
done

if test -s $TMPALL; then
  bug
  echo 1>&2 "errchk: $SOURCEFILE: unmatched error messages:"
  echo 1>&2 "=================================================="
  cat 1>&2 $TMPALL
  echo 1>&2 "=================================================="
  echo 1 > $TMPSTAT
fi

status=`cat $TMPSTAT`

exit $status
