Hi! Given that nobody is available to review/approve this patch, and it cannot really cause any harm, will my (old) review/"non-formal approval" be sufficient for Frederik to push this? Or, in other words: Frederik, please push if nobody objects within the next week.
Grüße Thomas On 2020-06-03T07:37:01+0200, Frederik Harwath <frede...@codesourcery.com> wrote: > Frederik Harwath <frede...@codesourcery.com> writes: > > ping :-) > >> Frederik Harwath <frede...@codesourcery.com> writes: >> >> Hi Rainer, hi Mike, >> ping: https://gcc.gnu.org/pipermail/gcc-patches/2020-May/545803.html >> >> Best regards, >> Frederik >> >>> Hi Thomas, >>> >>> Thomas Schwinge <tho...@codesourcery.com> writes: >>> >>>> I can't formally approve testsuite patches, but did a review anyway: >>> >>> Thanks for the review! >>> >>>> On 2020-05-15T12:31:54+0200, Frederik Harwath <frede...@codesourcery.com> >>>> wrote: >>> >>>>> The dump >>>>> scanning procedures are changed to make the test unresolved >>>>> if globbing matches more than one file. >>>> >>>> (The code changes look good, but I have not tested that specific aspect.) >>> >>> We do not have automated tests for the testsuite commands :-), but I >>> have of course tested this manually. >>> >>>> As I said, not an approval, and minor comments (see below), but still: >>>> >>>> Reviewed-by: Thomas Schwinge <tho...@codesourcery.com> >>>> >>>> Do we have to similarly also audit/alter other testsuite infrastructure >>>> files, anything that uses '[glob [...]]'? (..., and then generalize >>>> 'glob-dump-file' into 'glob-one-file', or similar.) That can be done >>>> incrementally, as far as I'm concerned. >>> >>> I also think it would make sense to adapt similar test commands as well. >>> >>>> May also make this more useful/explicit: >>>> >>>> This is useful if, for example, if a pass has several static >>>> instances [correct terminology?], and depending on torture testing >>>> command-line flags, a different instance executes and produces a dump >>>> file, and so in the test case you can use a generic [put example >>>> here] to scan the varying dump files names. >>>> >>>> (Or similar.) >>> >>> I have moved the explanation below the description of the individual >>> commands and added an example. See the attached revised patch. >>> >>> Best regards, >>> Frederik >>> >>> From 2a17749d6dbcac690d698323240438722d6119ef Mon Sep 17 00:00:00 2001 >>> From: Frederik Harwath <frede...@codesourcery.com> >>> Date: Fri, 15 May 2020 10:35:48 +0200 >>> Subject: [PATCH] testsuite: clarify scan-dump file globbing behavior >>> >>> The test commands for scanning optimization dump files >>> perform globbing on the argument that specifies the suffix >>> of the dump files to be scanned. This behavior is currently >>> undocumented. Furthermore, the current implementation of >>> "scan-dump" and similar procedures yields an error whenever >>> the file name globbing matches more than one file (due to an >>> attempt to call "open" on multiple files) while a failure to >>> match any file results in an unresolved test. >>> >>> This commit documents the globbing behavior. The dump >>> scanning procedures are changed to make the test unresolved >>> if globbing matches more than one file. >>> >>> gcc/ChangeLog: >>> >>> 2020-05-19 Frederik Harwath <frede...@codesourcery.com> >>> >>> * doc/sourcebuild.texi: Describe globbing of the >>> dump file scanning commands "suffix" argument. >>> >>> gcc/testsuite/ChangeLog: >>> >>> 2020-05-19 Frederik Harwath <frede...@codesourcery.com> >>> >>> * lib/scandump.exp (glob-dump-file): New proc. >>> (scan-dump): Use glob-dump-file for file name expansion. >>> (scan-dump-times): Likewise. >>> (scan-dump-dem): Likewise. >>> (scan-dump-dem-not): Likewise. >>> >>> Reviewed-by: Thomas Schwinge <tho...@codesourcery.com> >>> --- >>> gcc/doc/sourcebuild.texi | 13 ++++++++ >>> gcc/testsuite/lib/scandump.exp | 54 +++++++++++++++++++++++++++------- >>> 2 files changed, 56 insertions(+), 11 deletions(-) >>> >>> diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi >>> index 240d6e4b08e..9df4b06d460 100644 >>> --- a/gcc/doc/sourcebuild.texi >>> +++ b/gcc/doc/sourcebuild.texi >>> @@ -2911,6 +2911,19 @@ Passes if @var{regex} does not match demangled text >>> in the dump file with >>> suffix @var{suffix}. >>> @end table >>> >>> +The @var{suffix} argument which describes the dump file to be scanned >>> +may contain a glob pattern that must expand to exactly one file >>> +name. This is useful if, e.g., different pass instances are executed >>> +depending on torture testing command-line flags, producing dump files >>> +whose names differ only in their pass instance number suffix. For >>> +example, to scan instances 1, 2, 3 of a tree pass ``mypass'' for >>> +occurrences of the string ``code has been optimized'', use: >>> +@smallexample >>> +/* @{ dg-options "-fdump-tree-mypass" @} */ >>> +/* @{ dg-final @{ scan-tree-dump "code has been optimized" "mypass\[1-3\]" >>> @} @} */ >>> +@end smallexample >>> + >>> + >>> @subsubsection Check for output files >>> >>> @table @code >>> diff --git a/gcc/testsuite/lib/scandump.exp b/gcc/testsuite/lib/scandump.exp >>> index d6ba350acc8..f3a991b590a 100644 >>> --- a/gcc/testsuite/lib/scandump.exp >>> +++ b/gcc/testsuite/lib/scandump.exp >>> @@ -39,6 +39,34 @@ proc dump-base { args } { >>> return $dumpbase >>> } >>> >>> +# Expand dump file name pattern to exactly one file. >>> +# Return a single dump file name or an empty string >>> +# if the pattern matches no file or more than one file. >>> +# >>> +# Argument 0 is the testcase name >>> +# Argument 1 is the dump file glob pattern >>> +proc glob-dump-file { args } { >>> + >>> + set pattern [lindex $args 1] >>> + set dump_file "[glob -nocomplain $pattern]" >>> + set num_files [llength $dump_file] >>> + >>> + if { $num_files != 1 } { >>> + set testcase [lindex $args 0] >>> + if { $num_files == 0 } { >>> + verbose -log "$testcase: dump file does not exist" >>> + } >>> + >>> + if { $num_files > 1 } { >>> + verbose -log "$testcase: multiple dump files found" >>> + } >>> + >>> + return >>> + } >>> + >>> + return $dump_file >>> +} >>> + >>> # Utility for scanning compiler result, invoked via dg-final. >>> # Call pass if pattern is present, otherwise fail. >>> # >>> @@ -67,10 +95,10 @@ proc scan-dump { args } { >>> set testname "$testcase scan-[lindex $args 0]-dump $suf >>> \"$printable_pattern\"" >>> set src [file tail $filename] >>> set dumpbase [dump-base $src [lindex $args 3]] >>> - set output_file "[glob -nocomplain $dumpbase.[lindex $args 2]]" >>> + >>> + set pattern "$dumpbase.[lindex $args 2]" >>> + set output_file "[glob-dump-file $testcase $pattern]" >>> if { $output_file == "" } { >>> - verbose -log "$testcase: dump file does not exist" >>> - verbose -log "dump file: $dumpbase.$suf" >>> unresolved "$testname" >>> return >>> } >>> @@ -113,9 +141,10 @@ proc scan-dump-times { args } { >>> set testname "$testcase scan-[lindex $args 0]-dump-times $suf >>> \"$printable_pattern\" [lindex $args 2]" >>> set src [file tail $filename] >>> set dumpbase [dump-base $src [lindex $args 4]] >>> - set output_file "[glob -nocomplain $dumpbase.[lindex $args 3]]" >>> + >>> + set pattern "$dumpbase.[lindex $args 3]" >>> + set output_file "[glob-dump-file $testcase $pattern]" >>> if { $output_file == "" } { >>> - verbose -log "$testcase: dump file does not exist" >>> unresolved "$testname" >>> return >>> } >>> @@ -159,9 +188,10 @@ proc scan-dump-not { args } { >>> set testname "$testcase scan-[lindex $args 0]-dump-not $suf >>> \"$printable_pattern\"" >>> set src [file tail $filename] >>> set dumpbase [dump-base $src [lindex $args 3]] >>> - set output_file "[glob -nocomplain $dumpbase.[lindex $args 2]]" >>> + >>> + set pattern "$dumpbase.[lindex $args 2]" >>> + set output_file "[glob-dump-file $testcase $pattern]" >>> if { $output_file == "" } { >>> - verbose -log "$testcase: dump file does not exist" >>> unresolved "$testname" >>> return >>> } >>> @@ -216,9 +246,10 @@ proc scan-dump-dem { args } { >>> set testname "$testcase scan-[lindex $args 0]-dump-dem $suf >>> \"$printable_pattern\"" >>> set src [file tail $filename] >>> set dumpbase [dump-base $src [lindex $args 3]] >>> - set output_file "[glob -nocomplain $dumpbase.[lindex $args 2]]" >>> + >>> + set pattern "$dumpbase.[lindex $args 2]" >>> + set output_file "[glob-dump-file $testcase $pattern]" >>> if { $output_file == "" } { >>> - verbose -log "$testcase: dump file does not exist" >>> unresolved "$testname" >>> return >>> } >>> @@ -272,9 +303,10 @@ proc scan-dump-dem-not { args } { >>> set testname "$testcase scan-[lindex $args 0]-dump-dem-not $suf >>> \"$printable_pattern\"" >>> set src [file tail $filename] >>> set dumpbase [dump-base $src [lindex $args 3]] >>> - set output_file "[glob -nocomplain $dumpbase.[lindex $args 2]]" >>> + >>> + set pattern "$dumpbase.[lindex $args 2]" >>> + set output_file "[glob-dump-file $testcase $pattern]" >>> if { $output_file == "" } { >>> - verbose -log "$testcase: dump file does not exist" >>> unresolved "$testname" >>> return >>> } ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter