PING Re: testsuite: clarify scan-dump file globbing behavior
Frederik Harwath
frederik@codesourcery.com
Wed Jun 3 05:37:01 GMT 2020
Frederik Harwath <frederik@codesourcery.com> writes:
ping :-)
> Frederik Harwath <frederik@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 <thomas@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 <frederik@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 <thomas@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 <frederik@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 <frederik@codesourcery.com>
>>
>> * doc/sourcebuild.texi: Describe globbing of the
>> dump file scanning commands "suffix" argument.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2020-05-19 Frederik Harwath <frederik@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 <thomas@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
>> }
>> --
>> 2.17.1
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
More information about the Gcc-patches
mailing list