Hi!

This changed needs more attention I'm afraid:

On 2023-02-23T15:18:04+0100, Jakub Jelinek via Gcc-patches 
<gcc-patches@gcc.gnu.org> wrote:
> On Wed, Feb 22, 2023 at 02:33:42PM -0300, Alexandre Oliva via Gcc-patches 
> wrote:
>> When a multi-source module is found to be unsupported, we fail
>> module_cmi_p and subsequent sources.  Override proc unsupported to
>> mark the result in module_do, and test it to skip module_cmp_p and
>> subsequent related tests.
>>
>> for  gcc/testsuite/ChangeLog
>>
>>      * g++.dg/modules/modules.exp: Override unsupported to update
>>      module_do, and test it after dg-test.

That's commit r13-6288-g5344482c4d3ae0618fa8f5ed38f8309db43fdb82
"testsuite: Skip module_cmi_p and related unsupported module test":

    --- gcc/testsuite/g++.dg/modules/modules.exp
    +++ gcc/testsuite/g++.dg/modules/modules.exp
    @@ -315,6 +315,17 @@ proc module-check-requirements { tests } {
     # cleanup any detritus from previous run
     cleanup_module_files [find $DEFAULT_REPO *.gcm]

    +# Override unsupported to set the second element of module_do to "N",
    +# so that, after an unsupported result in dg-test, we can skip rather
    +# than fail subsequent related tests.
    +set module_do {"compile" "P"}
    +rename unsupported saved-unsupported
    +proc unsupported { args } {
    +    global module_do
    +    lset module_do 1 "N"
    +    return [saved-unsupported $args]
    +}
    +
     # not grouped tests, sadly tcl doesn't have negated glob
     foreach test [prune [lsort [find $srcdir/$subdir {*.[CH]}]] \
                  "$srcdir/$subdir/*_?.\[CH\]"] {
    @@ -327,6 +338,9 @@ foreach test [prune [lsort [find $srcdir/$subdir 
{*.[CH]}]] \
            set module_cmis {}
            verbose "Testing $nshort $std" 1
            dg-test $test "$std" $DEFAULT_MODFLAGS
    +       if { [lindex $module_do 1] == "N" } {
    +           continue
    +       }
            set testcase [string range $test [string length "$srcdir/"] end]
            cleanup_module_files [module_cmi_p $testcase $module_cmis]
        }
    @@ -372,6 +386,9 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
                        }
                    }
                    dg-test -keep-output $test "$std" $DEFAULT_MODFLAGS
    +               if { [lindex $module_do 1] == "N" } {
    +                   break
    +               }
                    set testcase [string range $test [string length "$srcdir/"] 
end]
                    lappend mod_files [module_cmi_p $testcase $module_cmis]
                }

First, I'm seeing this change my 'g++.dg/modules/modules.exp' '*.sum'
output as follows:

    -UNSUPPORTED: g++.dg/modules/explicit-bool-1_a.H -std=c++17
     PASS: g++.dg/modules/explicit-bool-1_a.H -std=c++2a (test for excess 
errors)
     PASS: g++.dg/modules/explicit-bool-1_a.H -std=c++2b (test for excess 
errors)
    -UNSUPPORTED: g++.dg/modules/explicit-bool-1_b.C -std=c++17
     PASS: g++.dg/modules/explicit-bool-1_b.C -std=c++2a (test for excess 
errors)
     PASS: g++.dg/modules/explicit-bool-1_b.C -std=c++2b (test for excess 
errors)
     PASS: g++.dg/modules/export-1.C -std=c++17  (test for errors, line 10)
    @@ -7247,6 +7245,7 @@
     PASS: g++.dg/modules/xtreme-tr1_b.C -std=c++17 (test for excess errors)
     PASS: g++.dg/modules/xtreme-tr1_b.C -std=c++2a (test for excess errors)
     PASS: g++.dg/modules/xtreme-tr1_b.C -std=c++2b (test for excess errors)
    +UNSUPPORTED: {g++.dg/modules/explicit-bool-1_a.H -std=c++17}

I assume that the second UNSUPPORTED:

    -UNSUPPORTED: g++.dg/modules/explicit-bool-1_b.C -std=c++17

... disappears is the intention of this patch?

But surely the curly braces in:

    -UNSUPPORTED: g++.dg/modules/explicit-bool-1_a.H -std=c++17

    +UNSUPPORTED: {g++.dg/modules/explicit-bool-1_a.H -std=c++17}

... are not intentional?  (Alexandre?)


But worse, the latter also "bleeds into" all other testing that's
executing as part of the same 'runtest' invocation (that is, further
'*.exp' files).  (I've ranted before about how much I don't like this
aspect of DejaGnu/'runtest'...)  For example (random; there are many,
many more):

    [...]
     PASS: c-c++-common/tsan/sanitize-thread-macro.c   -O0  (test for excess 
errors)
    -UNSUPPORTED: c-c++-common/tsan/sanitize-thread-macro.c   -O2
    [...]
     PASS: g++.dg/tsan/pr88018.C   -O0  (test for excess errors)
    -UNSUPPORTED: g++.dg/tsan/pr88018.C   -O2
    [...]
    +UNSUPPORTED: {c-c++-common/tsan/sanitize-thread-macro.c   -O2 }
    +UNSUPPORTED: {g++.dg/tsan/pr88018.C   -O2 }
    [...]

That's undesirable.


Per Jakub:

> This patch breaks testing with more than one set of options in
> target board, like
> make check-g++ RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} modules.exp'
> yields:
> ...
>               === g++ Summary for unix/-m32 ===
>
> # of expected passes          7217
> # of unexpected failures      1
> # of expected failures                18
> # of unsupported tests                2
> Running target unix/-m64
> ...
> ERROR: tcl error sourcing 
> /home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp.
> ERROR: tcl error code TCL OPERATION RENAME TARGET_EXISTS
> ERROR: can't rename to "saved-unsupported": command already exists
>     while executing
> "rename unsupported saved-unsupported"
>     (file "/home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp" line 
> 322)
>     invoked from within
> "source /home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp"
>     ("uplevel" body line 1)
>     invoked from within
> "uplevel #0 source 
> /home/jakub/src/gcc/gcc/testsuite/g++.dg/modules/modules.exp"
>     invoked from within
> "catch "uplevel #0 source $test_file_name" msg"

ACK.

> In other spots where we in *.exp files rename some routine, we guard that

ACK, but that's -- as far as I can tell -- done for procs that are then
used only locally, or where all global use should use the 'rename'd proc.

However, we don't globally want 'UNSUPPORTED: {[...]}' (... in 'runtest'
invocations where 'g++.dg/modules/modules.exp' happened to have ran
before...), so...

> and the following patch does that for modules.exp too.
>
> Tested with running
> make check-g++ RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} modules.exp'
> again which now works properly again.

>       PR testsuite/108899
>       * g++.dg/modules/modules.exp: Only override unsupported if it
>       exists and saved-unsupported doesn't.
>
> --- gcc/testsuite/g++.dg/modules/modules.exp.jj       2023-02-22 
> 20:50:34.208421799 +0100
> +++ gcc/testsuite/g++.dg/modules/modules.exp  2023-02-23 13:07:40.207320104 
> +0100
> @@ -319,11 +319,15 @@ cleanup_module_files [find $DEFAULT_REPO
>  # so that, after an unsupported result in dg-test, we can skip rather
>  # than fail subsequent related tests.
>  set module_do {"compile" "P"}
> -rename unsupported saved-unsupported
> -proc unsupported { args } {
> -    global module_do
> -    lset module_do 1 "N"
> -    return [saved-unsupported $args]
> +if { [info procs unsupported] != [list] \
> +      && [info procs saved-unsupported] == [list] } {
> +    rename unsupported saved-unsupported
> +
> +    proc unsupported { args } {
> +     global module_do
> +     lset module_do 1 "N"
> +     return [saved-unsupported $args]
> +    }
>  }

..., this isn't sufficient.  Instead, we should undo the 'rename' at the
end of 'g++.dg/modules/modules.exp'.  OK to push the attached
"'g++.dg/modules/modules.exp': don't leak local 'unsupported' proc [PR108899]"
after proper testing?


And, Alexandre, please have a look at the -- now local to
'g++.dg/modules/modules.exp' -- issue about curly braces in
'UNSUPPORTED: [...]' -> 'UNSUPPORTED: {[...]}'?


Grüße
 Thomas


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 
München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas 
Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht 
München, HRB 106955
>From b5c6fae2467cf4245f379269792559b8c00eca58 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <tho...@codesourcery.com>
Date: Wed, 29 Mar 2023 21:11:19 +0200
Subject: [PATCH] 'g++.dg/modules/modules.exp': don't leak local 'unsupported'
 proc [PR108899]

Fix-up for commit 5344482c4d3ae0618fa8f5ed38f8309db43fdb82
"testsuite: Skip module_cmi_p and related unsupported module test".

	PR testsuite/108899
	gcc/testsuite/
	* g++.dg/modules/modules.exp: Don't leak local 'unsupported' proc.
---
 gcc/testsuite/g++.dg/modules/modules.exp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp
index e66b2082f20..23c4bac2e89 100644
--- a/gcc/testsuite/g++.dg/modules/modules.exp
+++ b/gcc/testsuite/g++.dg/modules/modules.exp
@@ -408,4 +408,8 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
     }
 }
 
+# Restore the saved 'unsupported' proc.
+rename unsupported {}
+rename saved-unsupported unsupported
+
 dg-finish
-- 
2.25.1

Reply via email to