Hi Frederik!

(We had internally discussed this.)

I can't formally approve testsuite patches, but did a review anyway:

On 2020-05-15T12:31:54+0200, Frederik Harwath <frede...@codesourcery.com> wrote:
> 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 related 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 at all results in an unresolved test.
>
> This patch documents the globbing behavior.

ACK.

> 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.)

> The procedures in scandump.exp all perform the file name expansion in
> essentially the same way and I have extracted this into a new
> procedure.

Thanks, that looks like I thought it should.

> But there is one very minor exception:
>
>> @@ -67,10 +95,10 @@ proc scan-dump { args } {
>>      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"
>
> "scan-dump" is the only procedure that prints the "dump file: ..." line.
> Should this be kept or is it ok to remove this as I have done in the
> patch? $dumpbase.$suf does not emit the correct file name anyway
> (a random example from my testing: "dump file: stdatomic-init.c.dce*")
> and the name of the files can be inferred from the test name easily.

OK to remove, as far as I'm concerned.

> I have tested the changes by running "make check" (with a
> --enable-languages=C only build, but this covers lots of uses
> of the affected test procedures) and observed no regressions.

I did a full 'make check' on powerpc64le-unknown-linux-gnu -- no issues
found.

> Ok to commit this to master?

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.

> From 6912e03d51d360dbbcf7eb1dc8d77d08c2a6e54c 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-15  Frederik Harwath  <frede...@codesourcery.com>
>
>       * doc/sourcebuild.texi: Describe globbing of the
>       dump file scanning commands "suffix" argument.
>
> gcc/testsuite/ChangeLog:
>
> 2020-05-15  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.
> ---
>  gcc/doc/sourcebuild.texi       |  4 ++-
>  gcc/testsuite/lib/scandump.exp | 54 +++++++++++++++++++++++++++-------
>  2 files changed, 46 insertions(+), 12 deletions(-)
>
> diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
> index 240d6e4b08e..b6c5a21cb71 100644
> --- a/gcc/doc/sourcebuild.texi
> +++ b/gcc/doc/sourcebuild.texi
> @@ -2888,7 +2888,9 @@ stands for zero or more unmatched lines; the whitespace 
> after
>
>  These commands are available for @var{kind} of @code{tree}, 
> @code{ltrans-tree},
>  @code{offload-tree}, @code{rtl}, @code{offload-rtl}, @code{ipa}, and
> -@code{wpa-ipa}.
> +@code{wpa-ipa}.  The @var{suffix} argument which describes the dump file

(You can add your new sentence addition on a new line.)

> +to be scanned may contain a glob pattern that must expand to exactly one
> +file name.

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.)


Grüße
 Thomas


> 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

Reply via email to