OSDN Git Service

2010-09-05 Tobias Burnus <burnus@net-b.de>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / lib / torture-options.exp
1 # Copyright (C) 2008 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with GCC; see the file COPYING3.  If not see
15 # <http://www.gnu.org/licenses/>.
16
17 # Prepare to use a new set of torture options. 
18 #
19 # Letting options leak from one set of tests to another can be confusing.
20 # Make sure variables are not set at the time we're called, because that
21 # would mean they were set without being cleared.
22 proc torture-init { args } {
23     global torture_without_loops global_with_loops
24
25     if [info exists torture_without_loops] {
26         error "torture-init: torture_without_loops is not empty as expected"
27     }
28     if [info exists torture_with_loops] {
29         error "torture-init: torture_with_loops is not empty as expected"
30     }
31 }
32
33 # Return 1 if torture options have already been set, 0 otherwise.
34 proc torture-options-exist { args } {
35     global torture_with_loops
36     return [info exists torture_with_loops]
37 }
38
39 # Return 1 if compiler option ARG only affects loops, 0 otherwise.
40 proc contains-loop-option-p { arg } {
41     switch -glob -- $arg {
42       "*loop*"          { return 1 }
43       default           { return 0 }
44     }
45 }
46
47 # Set torture options variables for tests with and without loops.
48 #
49 # Argument 0 is the list to use as torture options
50 # Argument 1 is the list to combine with the torture options.
51 # Argument 2 is the list to be appended to the torture options after
52 # combining argument 0 and 1.
53 proc set-torture-options { args } {
54     global torture_with_loops torture_without_loops
55
56     set torture_list [lindex $args 0]
57
58     if { [llength $args] > 1 } {
59         set other_list [lindex $args 1]
60     } else {
61         set other_list [list {}]
62     }
63
64     set torture_with_loops ""
65     set torture_without_loops ""
66     foreach torture_opts $torture_list {
67         foreach other_opts $other_list {
68             # Remove trailing space[s] to match previous output.
69             set torture_opts [string trimright $torture_opts]
70             if ![contains-loop-option-p $torture_opts] {
71                 lappend torture_without_loops "$torture_opts $other_opts"
72             }
73             lappend torture_with_loops "$torture_opts $other_opts"
74         }
75     }
76
77     if { [llength $args] > 2 } {
78         set append_list [lindex $args 2]
79         append torture_with_loops " $append_list"
80         append torture_without_loops " $append_list"
81     }
82 }
83
84 # Finish up after using a set of torture options.
85 #
86 # Letting options leak from one set of tests to another can be confusing.
87 # Make sure variables are set at the time we're called, and then unset
88 # them to prevent interference with other sets of tests.
89 proc torture-finish { args } {
90     global torture_without_loops torture_with_loops
91
92     if [info exists torture_without_loops] {
93         unset torture_without_loops
94     } else {
95         error "torture-finish: torture_without_loops is not defined"
96     }
97
98     if [info exists torture_with_loops] {
99         unset torture_with_loops
100     } else {
101         error "torture-finish: torture_with_loops is not defined"
102     }
103 }
104
105 # Useful for debugging .exp files.
106 proc dump-torture-options { args } {
107     global torture_without_loops torture_with_loops
108
109     if [info exists torture_without_loops] {
110         verbose "torture_without_loops = \"${torture_without_loops}\"" 1
111     } else {
112         verbose "torture_without_loops is not defined" 1
113     }
114
115     if [info exists torture_with_loops] {
116         verbose "torture_with_loops = \"${torture_with_loops}\"" 1
117     } else {
118         verbose "torture_with_loops is not defined" 1
119     }
120 }