1# Handlers for additional dg-xxx keywords in tests.
2
3# Copyright (C) 2004-2018 Free Software Foundation, Inc.
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; see the file COPYING3.  If not see
17# <http://www.gnu.org/licenses/>.
18
19proc dg-require-c-std { args } {
20    if { ![ check_v3_target_c_std ] } {
21	upvar dg-do-what dg-do-what
22	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
23	return
24    }
25    return
26}
27
28proc dg-require-debug-mode { args } {
29    if { ![ check_v3_target_debug_mode ] } {
30	upvar dg-do-what dg-do-what
31	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
32	return
33    }
34    return
35}
36
37proc dg-require-profile-mode { args } {
38    if { ![ check_v3_target_profile_mode ] } {
39	upvar dg-do-what dg-do-what
40	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
41	return
42    }
43    return
44}
45
46proc dg-require-normal-mode { args } {
47    if { ![ check_v3_target_normal_mode ] } {
48	upvar dg-do-what dg-do-what
49	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
50	return
51    }
52    return
53}
54
55proc dg-require-normal-namespace { args } {
56    if { ![ check_v3_target_normal_namespace ] } {
57	upvar dg-do-what dg-do-what
58	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
59	return
60    }
61    return
62}
63
64proc dg-require-parallel-mode { args } {
65    if { ![ check_v3_target_parallel_mode ] } {
66	upvar dg-do-what dg-do-what
67	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
68	return
69    }
70    return
71}
72
73proc dg-require-fileio { args } {
74    if { ![ check_v3_target_fileio ] } {
75	upvar dg-do-what dg-do-what
76	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
77	return
78    }
79    return
80}
81
82proc dg-require-namedlocale { args } {
83    if { ![ check_v3_target_namedlocale [lindex $args 1] ] } {
84	upvar dg-do-what dg-do-what
85	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
86	return
87    }
88    return
89}
90
91proc dg-require-sharedlib { args } {
92    if { ![ check_v3_target_sharedlib ] } {
93	upvar dg-do-what dg-do-what
94	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
95	return
96    }
97    return
98}
99
100proc dg-require-time { args } {
101    if { ![ check_v3_target_time ] } {
102	upvar dg-do-what dg-do-what
103	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
104	return
105    }
106    return
107}
108
109proc dg-require-cstdint { args } {
110    if { ![ check_v3_target_cstdint ] } {
111	upvar dg-do-what dg-do-what
112	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
113	return
114    }
115    return
116}
117
118proc dg-require-cmath { args } {
119    if { ![ check_v3_target_cmath ] } {
120	upvar dg-do-what dg-do-what
121	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
122	return
123    }
124    return
125}
126
127proc dg-require-thread-fence { args } {
128    if { ![ check_v3_target_thread_fence ] } {
129	upvar dg-do-what dg-do-what
130	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
131	return
132    }
133    return
134}
135
136proc dg-require-atomic-builtins { args } {
137    if { ![ check_v3_target_atomic_builtins ] } {
138	upvar dg-do-what dg-do-what
139	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
140	return
141    }
142    return
143}
144
145proc dg-require-gthreads { args } {
146    if { ![ check_v3_target_gthreads ] } {
147        upvar dg-do-what dg-do-what
148        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
149        return
150    }
151    return
152}
153
154proc dg-require-gthreads-timed { args } {
155    if { ![ check_v3_target_gthreads_timed ] } {
156        upvar dg-do-what dg-do-what
157        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
158        return
159    }
160    return
161}
162
163proc dg-require-sleep { args } {
164    if { ![ check_v3_target_sleep ] } {
165        upvar dg-do-what dg-do-what
166        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
167        return
168    }
169    return
170}
171
172proc dg-require-sched-yield { args } {
173    if { ![ check_v3_target_sched_yield ] } {
174        upvar dg-do-what dg-do-what
175        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
176        return
177    }
178    return
179}
180
181proc dg-require-string-conversions { args } {
182    if { ![ check_v3_target_string_conversions ] } {
183        upvar dg-do-what dg-do-what
184        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
185        return
186    }
187    return
188}
189
190proc dg-require-swprintf { args } {
191    if { ![ check_v3_target_swprintf ] } {
192        upvar dg-do-what dg-do-what
193        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
194        return
195    }
196    return
197}
198
199proc dg-require-binary-io { args } {
200    if { ![ check_v3_target_binary_io ] } {
201        upvar dg-do-what dg-do-what
202        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
203        return
204    }
205    return
206}
207
208proc dg-require-nprocs { args } {
209    if { ![ check_v3_target_nprocs ] } {
210        upvar dg-do-what dg-do-what
211        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
212        return
213    }
214    return
215}
216
217proc dg-require-static-libstdcxx { args } {
218    if { ![ check_v3_target_static_libstdcxx ] } {
219        upvar dg-do-what dg-do-what
220        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
221        return
222    }
223    return
224}
225
226proc dg-require-little-endian { args } {
227    if { ![ check_v3_target_little_endian ] } {
228        upvar dg-do-what dg-do-what
229        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
230        return
231    }
232    return
233}
234
235proc dg-require-filesystem-ts { args } {
236    if { ![ check_v3_target_filesystem_ts ] } {
237	upvar dg-do-what dg-do-what
238	set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
239	return
240    }
241    return
242}
243
244proc add_options_for_no_pch { flags } {
245    # This forces any generated and possibly included PCH to be invalid.
246    return "-D__GLIBCXX__=99999999"
247}
248
249# Like dg-options, but adds to the default options rather than replacing them.
250
251proc dg-additional-options { args } {
252    upvar dg-extra-tool-flags extra-tool-flags
253
254    if { [llength $args] > 3 } {
255        error "[lindex $args 0]: too many arguments"
256        return
257    }
258
259    if { [llength $args] >= 3 } {
260        switch [dg-process-target [lindex $args 2]] {
261            "S" { eval lappend extra-tool-flags [lindex $args 1] }
262            "N" { }
263            "F" { error "[lindex $args 0]: `xfail' not allowed here" }
264            "P" { error "[lindex $args 0]: `xfail' not allowed here" }
265        }
266    } else {
267        eval lappend extra-tool-flags [lindex $args 1]
268    }
269}
270