1# Copyright (C) 1997-2021 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# Define g++ callbacks for dg.exp. 18 19load_lib gcc-dg.exp 20 21proc g++-dg-test { prog do_what extra_tool_flags } { 22 return [gcc-dg-test-1 g++_target_compile $prog $do_what $extra_tool_flags] 23} 24 25 26proc g++-dg-prune { system text } { 27 return [gcc-dg-prune $system $text] 28} 29 30# Modified dg-runtest that runs tests in both C++98 and C++11 modes 31# unless they specifically specify one or the other. 32proc g++-dg-runtest { testcases flags default-extra-flags } { 33 global runtests 34 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] { 38 continue 39 } 40 41 # If the testcase specifies a standard, use that one. 42 # If not, run it under both 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++" 47 } else { 48 set std_prefix "-std=c++" 49 } 50 51 global gpp_std_list 52 if { [llength $gpp_std_list] > 0 } { 53 set std_list $gpp_std_list 54 } else { 55 set std_list { 98 14 17 2a } 56 } 57 set option_list { } 58 foreach x $std_list { 59 # Handle "concepts" as C++17 plus Concepts TS. 60 if { $x eq "concepts" } then { set x "17 -fconcepts" } 61 lappend option_list "${std_prefix}$x" 62 } 63 } else { 64 set option_list { "" } 65 } 66 67 set nshort [file tail [file dirname $test]]/[file tail $test] 68 69 foreach flags_t $option_list { 70 verbose "Testing $nshort, $flags $flags_t" 1 71 dg-test $test "$flags $flags_t" ${default-extra-flags} 72 } 73 } 74} 75