Tested x86_64-pc-linux-gnu, applying to trunk.

-- 8< --

The modules tests have used their own version of the code to run tests under
multiple standard versions; they should use the same one as other tests.

I'm not sure about continuing to run modules tests in C++17 mode, but I
guess we might as well for now.

gcc/testsuite/ChangeLog:

        * lib/g++-dg.exp (g++-std-flags): Factor out of g++-dg-runtest.
        * g++.dg/modules/modules.exp: Use it instead of a copy.
---
 gcc/testsuite/g++.dg/modules/modules.exp |  39 +------
 gcc/testsuite/lib/g++-dg.exp             | 129 +++++++++++++----------
 2 files changed, 78 insertions(+), 90 deletions(-)

diff --git a/gcc/testsuite/g++.dg/modules/modules.exp 
b/gcc/testsuite/g++.dg/modules/modules.exp
index 81d0bebdfe5..73b5de1397f 100644
--- a/gcc/testsuite/g++.dg/modules/modules.exp
+++ b/gcc/testsuite/g++.dg/modules/modules.exp
@@ -36,7 +36,6 @@ if ![info exists DEFAULT_CXXFLAGS] then {
     set DEFAULT_CXXFLAGS " -pedantic-errors -Wno-long-long"
 }
 set DEFAULT_MODFLAGS $DEFAULT_CXXFLAGS
-set MOD_STD_LIST { 17 2a 2b }
 
 dg-init
 
@@ -261,44 +260,16 @@ proc srcdir {} {
     return $testdir
 }
 
-# Return set of std options to iterate over, taken from g++-dg.exp & compat.exp
+# Return set of std options to iterate over.
 proc module-init { src } {
-    set tmp [dg-get-options $src]
-    set option_list {}
-    set have_std 0
-    set std_prefix "-std=c++"
+    set option_list [g++-std-flags $src]
     global extra_tool_flags
     set extra_tool_flags {}
-    global MOD_STD_LIST
 
-    foreach op $tmp {
-       switch [lindex $op 0] {
-           "dg-options" {
-               set std_prefix "-std=gnu++"
-               if { [string match "*-std=*" [lindex $op 2]] } {
-                   set have_std 1
-               }
-               eval lappend extra_tool_flags [lindex $op 2]
-           }
-           "dg-additional-options" {
-               if { [string match "*-std=*" [lindex $op 2]] } {
-                   set have_std 1
-               }
-               eval lappend extra_tool_flags [lindex $op 2]
-           }
-       }
-    }
-
-    if { $have_std } {
-       lappend option_list ""
-    } elseif { [string match "*xtreme*" $src] } {
+    if { [llength $option_list]
+        && [string match "*xtreme*" $src] } {
        # Only run the xtreme tests once.
-       set x [lindex $MOD_STD_LIST end]
-       lappend option_list "${std_prefix}$x"
-    } else {
-       foreach x $MOD_STD_LIST {
-           lappend option_list "${std_prefix}$x"
-       }
+       set option_list [lrange [lsort $option_list] end end]
     }
 
     return $option_list
diff --git a/gcc/testsuite/lib/g++-dg.exp b/gcc/testsuite/lib/g++-dg.exp
index 26bda651e01..eb7a9714bc4 100644
--- a/gcc/testsuite/lib/g++-dg.exp
+++ b/gcc/testsuite/lib/g++-dg.exp
@@ -27,6 +27,78 @@ proc g++-dg-prune { system text } {
     return [gcc-dg-prune $system $text]
 }
 
+# Return a list of -std flags to use for TEST.
+proc g++-std-flags { test } {
+    # If the testcase specifies a standard, use that one.
+    # If not, run it under several standards, allowing GNU extensions
+    # if there's a dg-options line.
+    if ![search_for $test "-std=*++"] {
+       if [search_for $test "dg-options"] {
+           set std_prefix "-std=gnu++"
+       } else {
+           set std_prefix "-std=c++"
+       }
+
+       set low 0
+       # Some directories expect certain minimums.
+       if { [string match "*/modules/*" $test] } { set low 17 }
+
+       # See g++.exp for the initial value of this list.
+       global gpp_std_list
+       if { [llength $gpp_std_list] > 0 } {
+           set std_list {}
+           foreach ver $gpp_std_list {
+               set cmpver $ver
+               if { $ver == 98 } { set cmpver 03 }
+               if { $ver ni $std_list
+                    && $cmpver >= $low } {
+                   lappend std_list $ver
+               }
+           }
+       } else {
+           # If the test mentions specific C++ versions, test those.
+           set lines [get_matching_lines $test {\{ dg* c++[0-9][0-9]}]
+           set std_list {}
+           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 {
+           if { $x eq "impcx" } then { set x "26 -fimplicit-constexpr" }
+           lappend option_list "${std_prefix}$x"
+       }
+    } else {
+       set option_list { "" }
+    }
+    return $option_list
+}
+
 # Modified dg-runtest that runs tests in multiple standard modes,
 # unless they specifically specify one standard.
 proc g++-dg-runtest { testcases flags default-extra-flags } {
@@ -38,62 +110,7 @@ proc g++-dg-runtest { testcases flags default-extra-flags } 
{
            continue
        }
 
-       # If the testcase specifies a standard, use that one.
-       # If not, run it under several standards, allowing GNU extensions
-       # if there's a dg-options line.
-       if ![search_for $test "-std=*++"] {
-           if [search_for $test "dg-options"] {
-               set std_prefix "-std=gnu++"
-           } else {
-               set std_prefix "-std=c++"
-           }
-
-           # See g++.exp for the initial value of this list.
-           global gpp_std_list
-           if { [llength $gpp_std_list] > 0 } {
-               set std_list $gpp_std_list
-           } else {
-               # 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 {
-               if { $x eq "impcx" } then { set x "26 -fimplicit-constexpr" }
-               lappend option_list "${std_prefix}$x"
-           }
-       } else {
-           set option_list { "" }
-       }
+       set option_list [g++-std-flags $test]
 
        set nshort [file tail [file dirname $test]]/[file tail $test]
 

base-commit: 9694bb129c0dbf54138d94caa28d692842fdc233
-- 
2.49.0

Reply via email to