# Copyright (C) 1991-2021 Free Software Foundation, Inc.

# This program 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/>.

# This file was written by Rob Savoye. (rob@cygnus.com)
# Modified by Ovidiu Predescu (ovidiu@aracnet.com)


if $tracelevel then {
    strace $tracelevel
}

set additional_flags ""
lappend additional_flags "-fobjc-exceptions"
# load support procs
load_lib objc-torture.exp
load_lib torture-options.exp
load_lib target-supports.exp

torture-init
objc-set-runtime-options "execute" "additional_flags=-fobjc-exceptions"
set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS 

#
# main test loop
#

foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.m]] {
    # If we're only testing specific files and this isn't one of them, skip it.
    if ![runtest_file_p $runtests $src] then {
	continue
    }

    objc-torture-execute $src $additional_flags
}

torture-finish
