testsuite: move dg-test cleanup code from gcc-dg.exp to its own file

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>
This commit is contained in:
David Malcolm 2024-11-18 16:49:04 -05:00
parent 344356f781
commit c9d21e19df
8 changed files with 123 additions and 101 deletions

View File

@ -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
}

View File

@ -34,6 +34,7 @@ load_lib target-libpath.exp
load_lib torture-options.exp load_lib torture-options.exp
load_lib fortran-modules.exp load_lib fortran-modules.exp
load_lib multiline.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. # We set LC_ALL and LANG to C so that we get the same error messages as expected.
setenv LC_ALL C setenv LC_ALL C
@ -991,102 +992,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] \ if { [info procs saved-dg-warning] == [list] \
&& [info exists gcc_warning_prefix] } { && [info exists gcc_warning_prefix] } {
rename dg-warning saved-dg-warning rename dg-warning saved-dg-warning
@ -1330,11 +1235,6 @@ proc dg-missed { args } {
variable prune_notes variable prune_notes
proc initialize_prune_notes { } {
global prune_notes
set prune_notes 1
}
initialize_prune_notes initialize_prune_notes
proc dg-note { args } { proc dg-note { args } {

View File

@ -50,6 +50,7 @@ load_gcc_lib torture-options.exp
load_gcc_lib timeout.exp load_gcc_lib timeout.exp
load_gcc_lib timeout-dg.exp load_gcc_lib timeout-dg.exp
load_gcc_lib fortran-modules.exp load_gcc_lib fortran-modules.exp
load_gcc_lib dg-test-cleanup.exp
set dg-do-what-default run set dg-do-what-default run

View File

@ -41,6 +41,7 @@ load_gcc_lib scanwpaipa.exp
load_gcc_lib timeout-dg.exp load_gcc_lib timeout-dg.exp
load_gcc_lib torture-options.exp load_gcc_lib torture-options.exp
load_gcc_lib fortran-modules.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. # Try to load a test support file, built during libgomp configuration.
# Search in '..' vs. '.' to support parallel vs. sequential testing. # Search in '..' vs. '.' to support parallel vs. sequential testing.

View File

@ -50,6 +50,7 @@ load_gcc_lib scanwpaipa.exp
load_gcc_lib timeout-dg.exp load_gcc_lib timeout-dg.exp
load_gcc_lib torture-options.exp load_gcc_lib torture-options.exp
load_gcc_lib fortran-modules.exp load_gcc_lib fortran-modules.exp
load_gcc_lib dg-test-cleanup.exp
set dg-do-what-default run set dg-do-what-default run

View File

@ -29,6 +29,7 @@ load_gcc_lib scanipa.exp
load_gcc_lib torture-options.exp load_gcc_lib torture-options.exp
load_gcc_lib timeout-dg.exp load_gcc_lib timeout-dg.exp
load_gcc_lib fortran-modules.exp load_gcc_lib fortran-modules.exp
load_gcc_lib dg-test-cleanup.exp
load_gcc_lib gcc-dg.exp load_gcc_lib gcc-dg.exp
# Utility routines. # Utility routines.

View File

@ -73,6 +73,7 @@ load_gcc_lib timeout.exp
load_gcc_lib timeout-dg.exp load_gcc_lib timeout-dg.exp
load_gcc_lib wrapper.exp load_gcc_lib wrapper.exp
load_gcc_lib target-utils.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 # Useful for debugging. Pass the name of a variable and the verbosity
# threshold (number of -v's on the command line). # threshold (number of -v's on the command line).

View File

@ -48,6 +48,7 @@ load_gcc_lib scanwpaipa.exp
load_gcc_lib timeout-dg.exp load_gcc_lib timeout-dg.exp
load_gcc_lib torture-options.exp load_gcc_lib torture-options.exp
load_gcc_lib fortran-modules.exp load_gcc_lib fortran-modules.exp
load_gcc_lib dg-test-cleanup.exp
set dg-do-what-default run set dg-do-what-default run