#! /bin/sh

# Test a bug for which the compiler hangs, using environment variables
# set in several reghunt scripts and configuration files.
#
# Copyright (C) 2007 Free Software Foundation.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# For a copy of the GNU General Public License, write the the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02111-1301, USA.

ID=$1
LOGID=`printf "%04d" ${ID}`
LOG=${BUGID}.${LOGID}.out
MSGID="bug ${BUGID}, id ${ID}"

trap "echo \"`date`  compiler hang for ${MSGID}\"; pkill -9 cc1; exit $REG_FAIL" SIGUSR1
SLEEPCNT=10

# Set up to trap the hang.
sleep $SLEEPCNT && /bin/kill -s SIGUSR1 0 &
SLEEPID=$!

# This might hang.
$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1

# The command didn't hang.  Capture its return value so we can check
# whether it had other unexpected problems.
RET=$?

# Kill the sleep command so it won't finish normally and cause this
# process to get a signal telling it to report a failure.
/bin/kill $SLEEPID

if [ $RET -eq 0 ]; then
    echo "`date`  test compiled successfully for ${MSGID}"
    exit $REG_PASS
fi

grep -q 'No such file or directory' ${LOG}
if [ $? -eq 0 ]; then
    echo "`date`    unexpected failure: missing file for ${MSGID}"
    exit $REG_ERROR
fi

grep -q "egmentation fault"
if [ $? -eq 0 ]; then
    echo "`date`   unexpected failure: segfault for ${MSGID}"
    exit $REG_ERROR
fi

echo "`date`    unexpected failure for ${MSGID}"
exit $REG_ERROR
