aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2024-09-23 18:44:11 +0200
committerHans-Peter Nilsson <hp@bitrange.com>2024-09-26 01:04:59 +0200
commit14cd10815a39cc131662d4b6759ff6712ddd0b6d (patch)
tree0ee907bc255df4832940faefdc162ac1c1c726d6 /gcc
parent6fee826bc1bbd4016d5b79e16e642d68c4007b09 (diff)
downloadgcc-14cd10815a39cc131662d4b6759ff6712ddd0b6d.zip
gcc-14cd10815a39cc131662d4b6759ff6712ddd0b6d.tar.gz
gcc-14cd10815a39cc131662d4b6759ff6712ddd0b6d.tar.bz2
gfortran testsuite: Remove unit-files in files having open-statements, PR116701
PR testsuite/116701 shows that left-behind files from unnamed gfortran open statements (named unit.N, where N = unit number) can interfere with the result of a subsequent run. While that's unlikely to happen for a "real" fortran target or a test with a deleting close-statement, test-cases should not rely on previous test-cases passing and not execute along different execution paths depending on earlier runs, even if the difference is benevolent. Most but not all fortran test-cases go through gfortran-dg-runtest (gfortran.dg) or fortran-torture-execute (gfortran.fortran-torture). However, the exceptions, with more complex framework and call-chains, either don't run or don't have open-statements, so a more complex solution doesn't seem worthwhile. If test-cases with open-statements are added later to those parts of the test-suite, calls to fortran-delete-unit-files at the right spot may be added or worst case, "manual" cleanup-calls added, like: ! { dg-final { remote_file target delete "fort.10" } } Put the new proc in fortran-modules.exp since that's where other common fortran-testsuite dejagnu-library functions are located. PR testsuite/116701 * lib/fortran-modules.exp (fortran-delete-unit-files): New proc. * lib/gfortran-dg.exp (gfortran-dg-runtest): Call fortran-delete-unit-files after executing test. * lib/fortran-torture.exp (fortran-torture-execute): Ditto.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/lib/fortran-modules.exp21
-rw-r--r--gcc/testsuite/lib/fortran-torture.exp2
-rw-r--r--gcc/testsuite/lib/gfortran-dg.exp1
3 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/lib/fortran-modules.exp b/gcc/testsuite/lib/fortran-modules.exp
index 158b16b..a7196f1 100644
--- a/gcc/testsuite/lib/fortran-modules.exp
+++ b/gcc/testsuite/lib/fortran-modules.exp
@@ -172,3 +172,24 @@ proc igrep { args } {
}
return $grep_out
}
+
+# If the code has any "open" statements for numbered units, make sure
+# no corresponding output file remains. Redundant remove operations
+# are ok, but duplicate removals look sloppy, so track for uniqueness.
+proc fortran-delete-unit-files { src } {
+ set openpat {open *\( *(?:unit *= *)?([0-9]+)}
+ set openmatches [igrep $src $openpat]
+ if {![string match "" $openmatches]} {
+ # verbose -log "Found \"$openmatches\""
+ set deleted_units {}
+ foreach openmatch $openmatches {
+ regexp -nocase -- "$openpat" $openmatch match unit
+ if {[lsearch $deleted_units $unit] < 0} {
+ set rmfile "fort.$unit"
+ verbose -log "Deleting $rmfile"
+ remote_file target delete "fort.$unit"
+ lappend deleted_units $unit
+ }
+ }
+ }
+}
diff --git a/gcc/testsuite/lib/fortran-torture.exp b/gcc/testsuite/lib/fortran-torture.exp
index 66f5bc8..0727fb4 100644
--- a/gcc/testsuite/lib/fortran-torture.exp
+++ b/gcc/testsuite/lib/fortran-torture.exp
@@ -332,6 +332,8 @@ proc fortran-torture-execute { src } {
catch { remote_file build delete $executable }
}
$status "$testcase execution, $option"
+
+ fortran-delete-unit-files $src
}
cleanup-modules ""
}
diff --git a/gcc/testsuite/lib/gfortran-dg.exp b/gcc/testsuite/lib/gfortran-dg.exp
index fcba95d..2edc09e 100644
--- a/gcc/testsuite/lib/gfortran-dg.exp
+++ b/gcc/testsuite/lib/gfortran-dg.exp
@@ -160,6 +160,7 @@ proc gfortran-dg-runtest { testcases flags default-extra-flags } {
foreach flags_t $option_list {
verbose "Testing $nshort, $flags $flags_t" 1
dg-test $test "$flags $flags_t" ${default-extra-flags}
+ fortran-delete-unit-files $test
cleanup-modules ""
}
}