public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Thomas Schwinge <thomas@codesourcery.com>
To: <gcc-patches@gcc.gnu.org>, Jakub Jelinek <jakub@redhat.com>,
	"Richard Biener" <rguenther@suse.de>,
	Jason Merrill <jason@redhat.com>,
	"Alexandre Oliva" <oliva@adacore.com>,
	<ro@cebitec.uni-bielefeld.de>, <mikestump@comcast.net>
Cc: <nathan@acm.org>
Subject: 'g++.dg/modules/modules.exp': don't leak local 'unsupported' proc [PR108899] (was: [PATCH] testsuite: Fix up modules.exp [PR108899])
Date: Wed, 29 Mar 2023 21:59:20 +0200	[thread overview]
Message-ID: <87o7ob2usn.fsf@euler.schwinge.homeip.net> (raw)
In-Reply-To: <Y/d1nMrKs775Bfs+@tucnak>

[-- Attachment #1: Type: text/plain, Size: 8179 bytes --]

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

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-g-.dg-modules-modules.exp-don-t-leak-local-unsupport.patch --]
[-- Type: text/x-diff, Size: 1019 bytes --]

From b5c6fae2467cf4245f379269792559b8c00eca58 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@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


  parent reply	other threads:[~2023-03-29 19:59 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-17  6:55 [PATCH] Skip module_cmi_p and related unsupported module test Alexandre Oliva
2023-02-20  4:27 ` Jason Merrill
2023-02-22 17:33   ` Alexandre Oliva
2023-02-23 14:18     ` [PATCH] testsuite: Fix up modules.exp [PR108899] Jakub Jelinek
2023-02-23 15:02       ` Richard Biener
2023-03-29 19:59       ` Thomas Schwinge [this message]
2023-03-30  7:00         ` 'g++.dg/modules/modules.exp': don't leak local 'unsupported' proc [PR108899] Alexandre Oliva
2023-03-30  9:39           ` Thomas Schwinge
2023-03-30 13:51           ` Alexandre Oliva
2023-03-31 18:52             ` Jason Merrill
2023-04-01 18:06             ` Mike Stump
2023-04-05  7:47             ` Thomas Schwinge
2023-04-06  2:38               ` Alexandre Oliva
2023-04-06 20:11                 ` Thomas Schwinge
2023-04-06 23:40                   ` Alexandre Oliva

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87o7ob2usn.fsf@euler.schwinge.homeip.net \
    --to=thomas@codesourcery.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=jason@redhat.com \
    --cc=mikestump@comcast.net \
    --cc=nathan@acm.org \
    --cc=oliva@adacore.com \
    --cc=rguenther@suse.de \
    --cc=ro@cebitec.uni-bielefeld.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).