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