* [pushed] c++: improve C++ testsuite default versions
@ 2024-07-27 20:25 Jason Merrill
0 siblings, 0 replies; only message in thread
From: Jason Merrill @ 2024-07-27 20:25 UTC (permalink / raw)
To: gcc-patches
Tested x86_64-pc-linux-gnu, applying to trunk.
-- 8< --
I wanted to add more cases to the setting of std_list in g++-dg.exp, but
didn't want to do a full scan through the file for each case. So this patch
improves that in two ways: first, by extracting all interesting lines on a
single pass; second, by generating the list more flexibly: now we test every
version mentioned explicitly in the testcase, plus a few more if fewer than
three are mentioned.
This also lowers changes from testing four to three versions for most
testcases: the current default and the earliest and latest versions. This
will reduce testing of C++14 and C++20 modes, and increase testing of C++26
mode. C++ front-end developers are encouraged to set the
GXX_TESTSUITE_STDS environment variable to test more modes.
gcc/testsuite/ChangeLog:
* lib/gcc-dg.exp (get_matching_lines): New.
* lib/g++-dg.exp: Improve std_list selection.
---
gcc/testsuite/lib/g++-dg.exp | 45 +++++++++++++++++++++++++-----------
gcc/testsuite/lib/gcc-dg.exp | 13 +++++++++++
2 files changed, 44 insertions(+), 14 deletions(-)
diff --git a/gcc/testsuite/lib/g++-dg.exp b/gcc/testsuite/lib/g++-dg.exp
index 52fba75c4a3..991be4d3867 100644
--- a/gcc/testsuite/lib/g++-dg.exp
+++ b/gcc/testsuite/lib/g++-dg.exp
@@ -53,21 +53,38 @@ proc g++-dg-runtest { testcases flags default-extra-flags } {
if { [llength $gpp_std_list] > 0 } {
set std_list $gpp_std_list
} else {
- # If the test requires a newer C++ version than which
- # is tested by default, use that C++ version for that
- # single test. Or if a test checks behavior specifically for
- # one C++ version, include that version in the default list.
- # These should be adjusted whenever the default std_list is
- # updated or newer C++ effective target is added.
- if [search_for $test "\{ dg-do * \{ target c++23"] {
- set std_list { 23 26 }
- } elseif [search_for $test "\{ dg-do * \{ target c++26"] {
- set std_list { 26 }
- } elseif [search_for $test "c++11_only"] {
- set std_list { 98 11 14 20 }
- } else {
- set std_list { 98 14 17 20 }
+ # If the test mentions specific C++ versions, test those.
+ set lines [get_matching_lines $test {\{ dg* c++[0-9][0-9]}]
+ set std_list {}
+ set low 0
+ foreach line $lines {
+ regexp {c\+\+([0-9][0-9])} $line -> ver
+ lappend std_list $ver
+
+ if { $ver == 98 } {
+ # Leave low alone.
+ } elseif { [regexp {dg-do|dg-require-effective-target} $line] } {
+ set low $ver
+ }
}
+ #verbose "low: $low" 1
+
+ set std_list [lsort -unique $std_list]
+
+ # If fewer than 3 specific versions are mentioned, add more.
+ # The order of this list is significant: first $cxx_default,
+ # then the oldest and newest, then others in rough order of
+ # importance based on test coverage and usage.
+ foreach ver { 17 98 26 11 20 14 23 } {
+ set cmpver $ver
+ if { $ver == 98 } { set cmpver 03 }
+ if { [llength $std_list] < 3
+ && $ver ni $std_list
+ && $cmpver > $low } {
+ lappend std_list $ver
+ }
+ }
+ verbose "std_list: $std_list" 1
}
set option_list { }
foreach x $std_list {
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 228c21d1207..992062103c1 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -574,6 +574,19 @@ proc search_for { file pattern } {
return 0
}
+# get_matching_lines -- return a list of matching lines in file
+proc get_matching_lines { file pattern } {
+ set lines {}
+ set fd [open $file r]
+ while { [gets $fd cur_line]>=0 } {
+ if [string match "*$pattern*" $cur_line] then {
+ lappend lines $cur_line
+ }
+ }
+ close $fd
+ return $lines
+}
+
# Modified dg-runtest that can cycle through a list of optimization options
# as c-torture does.
proc gcc-dg-runtest { testcases flags default-extra-flags } {
base-commit: 928116e94a5a8a995dffd926af58abfa7286e78e
--
2.45.2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-07-27 20:25 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-27 20:25 [pushed] c++: improve C++ testsuite default versions Jason Merrill
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).