I need to use this cleanup logic for the testsuite for libdiagnostics
where it's too awkward to directly use gcc-dg.exp itself.

No functional change intended.

gcc/testsuite/ChangeLog:
        * lib/dg-test-cleanup.exp: New file, from material moved from
        lib/gcc-dg.exp.
        * lib/gcc-dg.exp: Add load_lib of dg-test-cleanup.exp.
        (cleanup-after-saved-dg-test): Move to lib/dg-test-cleanup.exp.
        (dg-test): Likewise for override.
        (initialize_prune_notes): Likewise.

libatomic/ChangeLog:
        * testsuite/lib/libatomic.exp: Add
        "load_gcc_lib dg-test-cleanup.exp".

libgomp/ChangeLog:
        * testsuite/lib/libgomp.exp: Add
        "load_gcc_lib dg-test-cleanup.exp".
libitm/ChangeLog:
        * testsuite/lib/libitm.exp: Add
        "load_gcc_lib dg-test-cleanup.exp".

libphobos/ChangeLog:
        * testsuite/lib/libphobos-dg.exp: Add
        "load_gcc_lib dg-test-cleanup.exp".

libstdc++-v3/ChangeLog:
        * testsuite/lib/libstdc++.exp: Add
        "load_gcc_lib dg-test-cleanup.exp".

libvtv/ChangeLog:
        * testsuite/lib/libvtv.exp: Add
        "load_gcc_lib dg-test-cleanup.exp".

Signed-off-by: David Malcolm <dmalc...@redhat.com>
---
 gcc/testsuite/lib/dg-test-cleanup.exp    | 116 +++++++++++++++++++++++
 gcc/testsuite/lib/gcc-dg.exp             | 102 +-------------------
 libatomic/testsuite/lib/libatomic.exp    |   1 +
 libgomp/testsuite/lib/libgomp.exp        |   1 +
 libitm/testsuite/lib/libitm.exp          |   1 +
 libphobos/testsuite/lib/libphobos-dg.exp |   1 +
 libstdc++-v3/testsuite/lib/libstdc++.exp |   1 +
 libvtv/testsuite/lib/libvtv.exp          |   1 +
 8 files changed, 123 insertions(+), 101 deletions(-)
 create mode 100644 gcc/testsuite/lib/dg-test-cleanup.exp

diff --git a/gcc/testsuite/lib/dg-test-cleanup.exp 
b/gcc/testsuite/lib/dg-test-cleanup.exp
new file mode 100644
index 000000000000..b2b8507a0320
--- /dev/null
+++ b/gcc/testsuite/lib/dg-test-cleanup.exp
@@ -0,0 +1,116 @@
+#   Copyright (C) 1997-2024 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# We need to make sure that additional_* are cleared out after every
+# test.  It is not enough to clear them out *before* the next test run
+# because gcc-target-compile gets run directly from some .exp files
+# (outside of any test).  (Those uses should eventually be eliminated.)
+
+# Because the DG framework doesn't provide a hook that is run at the
+# end of a test, we must replace dg-test with a wrapper.
+
+if { [info procs saved-dg-test] == [list] } {
+    rename dg-test saved-dg-test
+
+    # Helper function for cleanups that should happen after the call
+    # to the real dg-test, whether or not it returns normally, or
+    # fails with an error.
+    proc cleanup-after-saved-dg-test { } {
+       global additional_files
+       global additional_sources
+       global additional_sources_used
+       global additional_prunes
+       global compiler_conditional_xfail_data
+       global shouldfail
+       global expect_ice
+       global testname_with_flags
+       global set_target_env_var
+       global set_compiler_env_var
+       global saved_compiler_env_var
+       global keep_saved_temps_suffixes
+       global nn_line_numbers_enabled
+       global multiline_expected_outputs
+       global freeform_regexps
+       global save_linenr_varnames
+
+       set additional_files ""
+       set additional_sources ""
+       set additional_sources_used ""
+       set additional_prunes ""
+       set shouldfail 0
+       set expect_ice 0
+       if [info exists set_target_env_var] {
+           unset set_target_env_var
+       }
+       if [info exists set_compiler_env_var] {
+           restore-compiler-env-var
+           unset set_compiler_env_var
+           unset saved_compiler_env_var
+       }
+       if [info exists keep_saved_temps_suffixes] {
+           unset keep_saved_temps_suffixes
+       }
+       unset_timeout_vars
+       if [info exists compiler_conditional_xfail_data] {
+           unset compiler_conditional_xfail_data
+       }
+       if [info exists testname_with_flags] {
+           unset testname_with_flags
+       }
+       set nn_line_numbers_enabled 0
+       set multiline_expected_outputs []
+       set freeform_regexps []
+
+       if { [info exists save_linenr_varnames] } {
+           foreach varname $save_linenr_varnames {
+               # Cleanup varname
+               eval global $varname
+               eval unset $varname
+
+               # Cleanup varname_used, or generate defined-but-not-used
+               # warning.
+               set varname_used used_$varname
+               eval global $varname_used
+               eval set used [info exists $varname_used]
+               if { $used } {
+                   eval unset $varname_used
+               } else {
+                   regsub {^saved_linenr_} $varname "" org_varname
+                   warning "dg-line var $org_varname defined, but not used"
+               }
+           }
+           unset save_linenr_varnames
+       }
+
+       initialize_prune_notes
+    }
+
+    proc dg-test { args } {
+       global errorInfo
+
+       if { [ catch { eval saved-dg-test $args } errmsg ] } {
+           set saved_info $errorInfo
+           cleanup-after-saved-dg-test
+           error $errmsg $saved_info
+       }
+       cleanup-after-saved-dg-test
+    }
+}
+
+proc initialize_prune_notes { } {
+    global prune_notes
+    set prune_notes 1
+}
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 992062103c12..33b7e5a1e2c2 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -34,6 +34,7 @@ load_lib target-libpath.exp
 load_lib torture-options.exp
 load_lib fortran-modules.exp
 load_lib multiline.exp
+load_lib dg-test-cleanup.exp
 
 # We set LC_ALL and LANG to C so that we get the same error messages as 
expected.
 setenv LC_ALL C
@@ -990,102 +991,6 @@ proc output-exists-not { args } {
     }
 }
 
-# We need to make sure that additional_* are cleared out after every
-# test.  It is not enough to clear them out *before* the next test run
-# because gcc-target-compile gets run directly from some .exp files
-# (outside of any test).  (Those uses should eventually be eliminated.)
-
-# Because the DG framework doesn't provide a hook that is run at the
-# end of a test, we must replace dg-test with a wrapper.
-
-if { [info procs saved-dg-test] == [list] } {
-    rename dg-test saved-dg-test
-
-    # Helper function for cleanups that should happen after the call
-    # to the real dg-test, whether or not it returns normally, or
-    # fails with an error.
-    proc cleanup-after-saved-dg-test { } {
-       global additional_files
-       global additional_sources
-       global additional_sources_used
-       global additional_prunes
-       global compiler_conditional_xfail_data
-       global shouldfail
-       global expect_ice
-       global testname_with_flags
-       global set_target_env_var
-       global set_compiler_env_var
-       global saved_compiler_env_var
-       global keep_saved_temps_suffixes
-       global nn_line_numbers_enabled
-       global multiline_expected_outputs
-       global freeform_regexps
-       global save_linenr_varnames
-
-       set additional_files ""
-       set additional_sources ""
-       set additional_sources_used ""
-       set additional_prunes ""
-       set shouldfail 0
-       set expect_ice 0
-       if [info exists set_target_env_var] {
-           unset set_target_env_var
-       }
-       if [info exists set_compiler_env_var] {
-           restore-compiler-env-var
-           unset set_compiler_env_var
-           unset saved_compiler_env_var
-       }
-       if [info exists keep_saved_temps_suffixes] {
-           unset keep_saved_temps_suffixes
-       }
-       unset_timeout_vars
-       if [info exists compiler_conditional_xfail_data] {
-           unset compiler_conditional_xfail_data
-       }
-       if [info exists testname_with_flags] {
-           unset testname_with_flags
-       }
-       set nn_line_numbers_enabled 0
-       set multiline_expected_outputs []
-       set freeform_regexps []
-
-       if { [info exists save_linenr_varnames] } {
-           foreach varname $save_linenr_varnames {
-               # Cleanup varname
-               eval global $varname
-               eval unset $varname
-
-               # Cleanup varname_used, or generate defined-but-not-used
-               # warning.
-               set varname_used used_$varname
-               eval global $varname_used
-               eval set used [info exists $varname_used]
-               if { $used } {
-                   eval unset $varname_used
-               } else {
-                   regsub {^saved_linenr_} $varname "" org_varname
-                   warning "dg-line var $org_varname defined, but not used"
-               }
-           }
-           unset save_linenr_varnames
-       }
-
-       initialize_prune_notes
-    }
-
-    proc dg-test { args } {
-       global errorInfo
-
-       if { [ catch { eval saved-dg-test $args } errmsg ] } {
-           set saved_info $errorInfo
-           cleanup-after-saved-dg-test
-           error $errmsg $saved_info
-       }
-       cleanup-after-saved-dg-test
-    }
-}
-
 if { [info procs saved-dg-warning] == [list] \
      && [info exists gcc_warning_prefix] } {
     rename dg-warning saved-dg-warning
@@ -1329,11 +1234,6 @@ proc dg-missed { args } {
 
 variable prune_notes
 
-proc initialize_prune_notes { } {
-    global prune_notes
-    set prune_notes 1
-}
-
 initialize_prune_notes
 
 proc dg-note { args } {
diff --git a/libatomic/testsuite/lib/libatomic.exp 
b/libatomic/testsuite/lib/libatomic.exp
index ed6ba806732f..f90bc4b708a0 100644
--- a/libatomic/testsuite/lib/libatomic.exp
+++ b/libatomic/testsuite/lib/libatomic.exp
@@ -50,6 +50,7 @@ load_gcc_lib torture-options.exp
 load_gcc_lib timeout.exp
 load_gcc_lib timeout-dg.exp
 load_gcc_lib fortran-modules.exp
+load_gcc_lib dg-test-cleanup.exp
 
 set dg-do-what-default run
 
diff --git a/libgomp/testsuite/lib/libgomp.exp 
b/libgomp/testsuite/lib/libgomp.exp
index 7c1092629168..cad0280f3798 100644
--- a/libgomp/testsuite/lib/libgomp.exp
+++ b/libgomp/testsuite/lib/libgomp.exp
@@ -41,6 +41,7 @@ load_gcc_lib scanwpaipa.exp
 load_gcc_lib timeout-dg.exp
 load_gcc_lib torture-options.exp
 load_gcc_lib fortran-modules.exp
+load_gcc_lib dg-test-cleanup.exp
 
 # Try to load a test support file, built during libgomp configuration.
 # Search in '..' vs. '.' to support parallel vs. sequential testing.
diff --git a/libitm/testsuite/lib/libitm.exp b/libitm/testsuite/lib/libitm.exp
index 3e60797c3e31..5b387f2ec408 100644
--- a/libitm/testsuite/lib/libitm.exp
+++ b/libitm/testsuite/lib/libitm.exp
@@ -50,6 +50,7 @@ load_gcc_lib scanwpaipa.exp
 load_gcc_lib timeout-dg.exp
 load_gcc_lib torture-options.exp
 load_gcc_lib fortran-modules.exp
+load_gcc_lib dg-test-cleanup.exp
 
 set dg-do-what-default run
 
diff --git a/libphobos/testsuite/lib/libphobos-dg.exp 
b/libphobos/testsuite/lib/libphobos-dg.exp
index 965ff025a04d..09b644ac573f 100644
--- a/libphobos/testsuite/lib/libphobos-dg.exp
+++ b/libphobos/testsuite/lib/libphobos-dg.exp
@@ -29,6 +29,7 @@ load_gcc_lib scanipa.exp
 load_gcc_lib torture-options.exp
 load_gcc_lib timeout-dg.exp
 load_gcc_lib fortran-modules.exp
+load_gcc_lib dg-test-cleanup.exp
 load_gcc_lib gcc-dg.exp
 
 # Utility routines.
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp 
b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 2510c7f4cbb9..161e9501a379 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -73,6 +73,7 @@ load_gcc_lib timeout.exp
 load_gcc_lib timeout-dg.exp
 load_gcc_lib wrapper.exp
 load_gcc_lib target-utils.exp
+load_gcc_lib dg-test-cleanup.exp
 
 # Useful for debugging.  Pass the name of a variable and the verbosity
 # threshold (number of -v's on the command line).
diff --git a/libvtv/testsuite/lib/libvtv.exp b/libvtv/testsuite/lib/libvtv.exp
index bfd03d7d2580..61980141a7ea 100644
--- a/libvtv/testsuite/lib/libvtv.exp
+++ b/libvtv/testsuite/lib/libvtv.exp
@@ -48,6 +48,7 @@ load_gcc_lib scanwpaipa.exp
 load_gcc_lib timeout-dg.exp
 load_gcc_lib torture-options.exp
 load_gcc_lib fortran-modules.exp
+load_gcc_lib dg-test-cleanup.exp
 
 set dg-do-what-default run
 
-- 
2.26.3

Reply via email to