#
# Expect driver script for GCC Regression Tests
#   Copyright (C) 1993-2022 Free Software Foundation, Inc.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.
#
# Written by Jeffrey Wheat (cassidy@cygnus.com)
#

#
# These tests come from Torbjorn Granlund's (tege@cygnus.com)
# C torture test suite, and other contributors.
#

if $tracelevel then {
    strace $tracelevel
}

# load support procs
load_lib c-torture.exp
load_lib torture-options.exp

torture-init
set-torture-options $C_TORTURE_OPTIONS {{}} $LTO_TORTURE_OPTIONS

#
# This loop will run c-torture on any *.c file found in this directory.
# If a *.c has a corresponding *.exp file, then the test is skipped as
# as the *.exp will drive the test itself.  It is done this way so that
# generic tests do not need a separate .exp for it.  Only the tests that 
# require unique options need their own .exp file.
#

foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
    if [file exists [file rootname $testcase].exp] then {
	verbose "INFO:\"[file rootname $testcase].exp\" exists, skipping test" 3
	continue
    }

    # If we're only testing specific files and this isn't one of them, skip it.
    if ![runtest_file_p $runtests $testcase] then {
	continue
    }

    c-torture $testcase
}

torture-finish
