#   Copyright (C) 2020-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 harness is for tests that should be run at all optimisation levels.

# Load support procs.
load_lib gdc-dg.exp

# The default option list can be overridden by
# TORTURE_OPTIONS="{ { list1 } ... { listN } }"

if ![info exists TORTURE_OPTIONS] {
    set TORTURE_OPTIONS [list \
	{ -O0 } { -O1 } { -O2 } { -O3 } { -Os } \
	{ -O0 -frelease } { -O0 -g } { -O0 -frelease -g } \
	{ -O1 -frelease } { -O1 -g } { -O1 -frelease -g } \
	{ -O2 -frelease } { -O2 -g } { -O2 -frelease -g } \
	{ -O3 -frelease } { -O3 -g } { -O3 -frelease -g } \
	{ -Os -frelease } { -Os -g } { -Os -frelease -g }]
}

# Initialize `dg'.
dg-init

# Initialize use of torture lists.
torture-init
set-torture-options $TORTURE_OPTIONS

# Main loop.
gdc-dg-runtest [lsort \
       [glob -nocomplain $srcdir/$subdir/*.d ] ] "" ""

# Finalize use of torture lists.
torture-finish

# All done.
dg-finish
