new file mode 100644
@@ -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
+}
@@ -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 } {
@@ -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
@@ -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.
@@ -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
@@ -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.
@@ -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).
@@ -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
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 <dmalcolm@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