# Copyright (C) 2003, 2006, 2009, 2010, 2014, 2018 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 this program; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

dg-init
libffi-init

global srcdir subdir
global compiler_vendor

if { [string match $compiler_vendor "gnu"] } {
    set warning_options "-Wno-unused-variable -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-uninitialized";
} else {
    set warning_options "-Wno-unused-variable -Wno-unused-parameter -Wno-uninitialized";
}

set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/test-call.c]]

for {set i 1} {$i < 82} {incr i} {
    run-many-tests $tlist [format "-DTEST%02d %s" $i $warning_options]
}

set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/test-callback.c]]

for {set i 1} {$i < 73} {incr i} {
    run-many-tests $tlist [format "-DTEST%02d %s" $i $warning_options]
}

dg-finish

# Local Variables:
# tcl-indent-level:4
# End:
