1 # Copyright
(C
) 1997-2024 Free Software Foundation
, Inc.
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.
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.
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
/>.
17 #
Define g
++ callbacks
for dg.exp.
21 proc g
++-dg
-test
{ prog do_what extra_tool_flags
} {
22 return [gcc
-dg
-test
-1 g
++_target_compile $prog $do_what $extra_tool_flags
]
26 proc g
++-dg
-prune
{ system text } {
27 return [gcc
-dg
-prune $
system $
text]
30 # Modified dg
-runtest that runs tests in multiple standard modes
,
31 # unless they specifically specify one standard.
32 proc g
++-dg
-runtest
{ testcases flags default
-extra
-flags
} {
35 foreach test $testcases
{
36 #
If we
're only testing specific files and this isn't one of them
, skip it.
37 if ![runtest_file_p $runtests $test
] {
41 #
If the testcase specifies a standard
, use that one.
42 #
If not
, run it under several standards
, allowing GNU extensions
43 #
if there
's a dg-options line.
44 if ![search_for $test "-std=*++"] {
45 if [search_for $test "dg-options"] {
46 set std_prefix "-std=gnu++"
48 set std_prefix "-std=c++"
51 # See g++.exp for the initial value of this list.
53 if { [llength $gpp_std_list] > 0 } {
54 set std_list $gpp_std_list
56 # If the test mentions specific C++ versions, test those.
57 set lines [get_matching_lines $test {\{ dg* c++[0-9][0-9]}]
61 regexp {c\+\+([0-9][0-9])} $line -> ver
66 } elseif { [regexp {dg-do|dg-require-effective-target} $line] } {
70 #verbose "low: $low" 1
72 set std_list [lsort -unique $std_list]
74 # If fewer than 3 specific versions are mentioned, add more.
75 # The order of this list is significant: first $cxx_default,
76 # then the oldest and newest, then others in rough order of
77 # importance based on test coverage and usage.
78 foreach ver { 17 98 26 11 20 14 23 } {
80 if { $ver == 98 } { set cmpver 03 }
81 if { [llength $std_list] < 3
87 verbose "std_list: $std_list" 1
91 if { $x eq "impcx" } then { set x "26 -fimplicit-constexpr" }
92 lappend option_list "${std_prefix}$x"
95 set option_list { "" }
98 set nshort [file tail [file dirname $test]]/[file tail $test]
100 foreach flags_t $option_list {
101 verbose "Testing $nshort, $flags $flags_t" 1
102 dg-test $test "$flags $flags_t" ${default-extra-flags}