123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- # Copyright (C) 2008-2015 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/>.
- # Prepare to use a new set of torture options.
- #
- # Letting options leak from one set of tests to another can be confusing.
- # Make sure variables are not set at the time we're called, because that
- # would mean they were set without being cleared.
- proc torture-init { args } {
- global torture_without_loops global_with_loops
- if [info exists torture_without_loops] {
- error "torture-init: torture_without_loops is not empty as expected"
- }
- if [info exists torture_with_loops] {
- error "torture-init: torture_with_loops is not empty as expected"
- }
- }
- # Return 1 if torture options have already been set, 0 otherwise.
- proc torture-options-exist { args } {
- global torture_with_loops
- return [info exists torture_with_loops]
- }
- # Return 1 if compiler option ARG only affects loops, 0 otherwise.
- proc contains-loop-option-p { arg } {
- switch -glob -- $arg {
- "*loop*" { return 1 }
- default { return 0 }
- }
- }
- # Set torture options variables for tests with and without loops.
- #
- # Argument 0 is the list to use as torture options
- # Argument 1 is the list to combine with the torture options.
- # Argument 2 is the list to be appended to the torture options after
- # combining argument 0 and 1.
- proc set-torture-options { args } {
- global torture_with_loops torture_without_loops
- set torture_list [lindex $args 0]
- if { [llength $args] > 1 } {
- set other_list [lindex $args 1]
- } else {
- set other_list [list {}]
- }
- set torture_with_loops ""
- set torture_without_loops ""
- foreach torture_opts $torture_list {
- foreach other_opts $other_list {
- # Remove trailing space[s] to match previous output.
- set torture_opts [string trimright $torture_opts]
- if ![contains-loop-option-p $torture_opts] {
- lappend torture_without_loops "$torture_opts $other_opts"
- }
- lappend torture_with_loops "$torture_opts $other_opts"
- }
- }
- if { [llength $args] > 2 } {
- set append_list [lindex $args 2]
- append torture_with_loops " $append_list"
- append torture_without_loops " $append_list"
- }
- }
- # Finish up after using a set of torture options.
- #
- # Letting options leak from one set of tests to another can be confusing.
- # Make sure variables are set at the time we're called, and then unset
- # them to prevent interference with other sets of tests.
- proc torture-finish { args } {
- global torture_without_loops torture_with_loops
- if [info exists torture_without_loops] {
- unset torture_without_loops
- } else {
- error "torture-finish: torture_without_loops is not defined"
- }
- if [info exists torture_with_loops] {
- unset torture_with_loops
- } else {
- error "torture-finish: torture_with_loops is not defined"
- }
- }
- # Useful for debugging .exp files.
- proc dump-torture-options { args } {
- global torture_without_loops torture_with_loops
- if [info exists torture_without_loops] {
- verbose "torture_without_loops = \"${torture_without_loops}\"" 1
- } else {
- verbose "torture_without_loops is not defined" 1
- }
- if [info exists torture_with_loops] {
- verbose "torture_with_loops = \"${torture_with_loops}\"" 1
- } else {
- verbose "torture_with_loops is not defined" 1
- }
- }
|