'g++.dg/modules/modules.exp': don't leak local 'unsupported' proc [PR108899] (was: [PATCH] testsuite: Fix up modules.exp [PR108899])

Message ID 87o7ob2usn.fsf@euler.schwinge.homeip.net
State Accepted
Headers
Series 'g++.dg/modules/modules.exp': don't leak local 'unsupported' proc [PR108899] (was: [PATCH] testsuite: Fix up modules.exp [PR108899]) |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Thomas Schwinge March 29, 2023, 7:59 p.m. UTC
  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
  

Comments

Alexandre Oliva March 30, 2023, 7 a.m. UTC | #1
On Mar 29, 2023, Thomas Schwinge <thomas@codesourcery.com> wrote:

> 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?

Yup

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

Unintended indeed, will look, thanks for letting me know


> But worse, the latter also "bleeds into" all other testing

Eeek

Yeah, that's a much bigger problem indeed.

> ..., 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?

Ooh, nice, I didn't know how to drop the renaming after we were done
with it, and hoped the end of the .exp would have accomplished that by
ending a scope.  Jakub had already pointed out this wasn't the case, but
I didn't realize, when he did, that this would carry over onto other
modules.


If we're dropping the renaming, I suppose we could also revert Jakub's
change.  I suppose this patch will take care of it, pending testing...


diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp
index 80aa392bc7f3b..6fd5050cef79b 100644
--- a/gcc/testsuite/g++.dg/modules/modules.exp
+++ b/gcc/testsuite/g++.dg/modules/modules.exp
@@ -319,15 +319,11 @@ cleanup_module_files [find $DEFAULT_REPO *.gcm]
 # so that, after an unsupported result in dg-test, we can skip rather
 # than fail subsequent related tests.
 set module_do {"compile" "P"}
-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]
-    }
+rename unsupported modules-saved-unsupported
+proc unsupported { args } {
+    global module_do
+    lset module_do 1 "N"
+    return [eval modules-saved-unsupported $args]
 }
 
 # not grouped tests, sadly tcl doesn't have negated glob
@@ -412,4 +408,10 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
     }
 }
 
+# Restore the original unsupported proc, lest it will affect
+# subsequent test runs, or even fail renaming if we run modules.exp
+# for multiple targets/multilibs/options.
+rename unsupported {}
+rename modules-saved-unsupported unsupported
+
 dg-finish
  
Thomas Schwinge March 30, 2023, 9:39 a.m. UTC | #2
Hi!

On 2023-03-30T04:00:03-0300, Alexandre Oliva <oliva@adacore.com> wrote:
> On Mar 29, 2023, Thomas Schwinge <thomas@codesourcery.com> wrote:
>> 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?)
>
> Unintended indeed, will look, thanks for letting me know
>
>
>> But worse, the latter also "bleeds into" all other testing
>
> Eeek
>
> Yeah, that's a much bigger problem indeed.
>
>> ..., 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?
>
> Ooh, nice, I didn't know how to drop the renaming after we were done
> with it, and hoped the end of the .exp would have accomplished that by
> ending a scope.  Jakub had already pointed out this wasn't the case, but
> I didn't realize, when he did, that this would carry over onto other
> modules.
>
> If we're dropping the renaming, I suppose we could also revert Jakub's
> change.

Yes, my plan was to push a 'git revert' of Jakub's change as a follow-up
(clean-up) *after* my proposed
"'g++.dg/modules/modules.exp': don't leak local 'unsupported' proc [PR108899]",
see attached again.

My testing has completed without issues; OK to push that one?

> +# Restore the original unsupported proc, lest it will affect
> +# subsequent test runs, or even fail renaming if we run modules.exp
> +# for multiple targets/multilibs/options.
> +rename unsupported {}
> +rename modules-saved-unsupported unsupported

Should I incorporate that comment instead of my simpler one?


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
  
Alexandre Oliva March 30, 2023, 1:51 p.m. UTC | #3
On Mar 30, 2023, Alexandre Oliva <oliva@adacore.com> wrote:

> If we're dropping the renaming, I suppose we could also revert Jakub's
> change.  I suppose this patch will take care of it, pending testing...

Regstrapped on x86_64-linux-gnu and also tested on arm-vx7r2 (with
gcc-12), where I used to get fails after an unsupported modules.exp
test, but there are no curly braces in the log files after the patch.
Ok to install?


[PR108899] testsuite: fix proc unsupported overriding in modules.exp

The overrider of proc unsupported in modules.exp had two problems
reported by Thomas Schwinge, even after Jakub Jelínek's fix:

- it remained in effect while running other dejagnu testsets

- it didn't quote correctly the argument list passed to it, which
  caused test names to be surrounded by curly braces, as in:

UNSUPPORTED: {...}

This patch fixes both issues, obsoleting and reverting Jakub's change,
by dropping the overrider and renaming the saved proc back, and by
using uplevel's argument list splicing.


for  gcc/testsuite/ChangeLog

	PR testsuite/108899
	* g++.dg/modules/modules.exp (unsupported): Drop renaming.
	Fix quoting.
---
 gcc/testsuite/g++.dg/modules/modules.exp |   20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp
index 80aa392bc7f3b..dc302d3d0af48 100644
--- a/gcc/testsuite/g++.dg/modules/modules.exp
+++ b/gcc/testsuite/g++.dg/modules/modules.exp
@@ -319,15 +319,11 @@ cleanup_module_files [find $DEFAULT_REPO *.gcm]
 # so that, after an unsupported result in dg-test, we can skip rather
 # than fail subsequent related tests.
 set module_do {"compile" "P"}
-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]
-    }
+rename unsupported modules-saved-unsupported
+proc unsupported { args } {
+    global module_do
+    lset module_do 1 "N"
+    return [uplevel 1 modules-saved-unsupported $args]
 }
 
 # not grouped tests, sadly tcl doesn't have negated glob
@@ -412,4 +408,10 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
     }
 }
 
+# Restore the original unsupported proc, lest it will affect
+# subsequent test runs, or even fail renaming if we run modules.exp
+# for multiple targets/multilibs/options.
+rename unsupported {}
+rename modules-saved-unsupported unsupported
+
 dg-finish
  
Jason Merrill March 31, 2023, 6:52 p.m. UTC | #4
On 3/30/23 09:51, Alexandre Oliva wrote:
> On Mar 30, 2023, Alexandre Oliva <oliva@adacore.com> wrote:
> 
>> If we're dropping the renaming, I suppose we could also revert Jakub's
>> change.  I suppose this patch will take care of it, pending testing...
> 
> Regstrapped on x86_64-linux-gnu and also tested on arm-vx7r2 (with
> gcc-12), where I used to get fails after an unsupported modules.exp
> test, but there are no curly braces in the log files after the patch.
> Ok to install?
> 
> 
> [PR108899] testsuite: fix proc unsupported overriding in modules.exp

The [PR] tag should go at the end of the subject line, not the start. 
OK with that change.

> The overrider of proc unsupported in modules.exp had two problems
> reported by Thomas Schwinge, even after Jakub Jelínek's fix:
> 
> - it remained in effect while running other dejagnu testsets
> 
> - it didn't quote correctly the argument list passed to it, which
>    caused test names to be surrounded by curly braces, as in:
> 
> UNSUPPORTED: {...}
> 
> This patch fixes both issues, obsoleting and reverting Jakub's change,
> by dropping the overrider and renaming the saved proc back, and by
> using uplevel's argument list splicing.
> 
> 
> for  gcc/testsuite/ChangeLog
> 
> 	PR testsuite/108899
> 	* g++.dg/modules/modules.exp (unsupported): Drop renaming.
> 	Fix quoting.
> ---
>   gcc/testsuite/g++.dg/modules/modules.exp |   20 +++++++++++---------
>   1 file changed, 11 insertions(+), 9 deletions(-)
> 
> diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp
> index 80aa392bc7f3b..dc302d3d0af48 100644
> --- a/gcc/testsuite/g++.dg/modules/modules.exp
> +++ b/gcc/testsuite/g++.dg/modules/modules.exp
> @@ -319,15 +319,11 @@ cleanup_module_files [find $DEFAULT_REPO *.gcm]
>   # so that, after an unsupported result in dg-test, we can skip rather
>   # than fail subsequent related tests.
>   set module_do {"compile" "P"}
> -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]
> -    }
> +rename unsupported modules-saved-unsupported
> +proc unsupported { args } {
> +    global module_do
> +    lset module_do 1 "N"
> +    return [uplevel 1 modules-saved-unsupported $args]
>   }
>   
>   # not grouped tests, sadly tcl doesn't have negated glob
> @@ -412,4 +408,10 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
>       }
>   }
>   
> +# Restore the original unsupported proc, lest it will affect
> +# subsequent test runs, or even fail renaming if we run modules.exp
> +# for multiple targets/multilibs/options.
> +rename unsupported {}
> +rename modules-saved-unsupported unsupported
> +
>   dg-finish
> 
>
  
Mike Stump April 1, 2023, 6:06 p.m. UTC | #5
On Mar 30, 2023, at 6:51 AM, Alexandre Oliva <oliva@adacore.com> wrote:
> 
> On Mar 30, 2023, Alexandre Oliva <oliva@adacore.com> wrote:
> 
>> If we're dropping the renaming, I suppose we could also revert Jakub's
>> change.  I suppose this patch will take care of it, pending testing...
> 
> Regstrapped on x86_64-linux-gnu and also tested on arm-vx7r2 (with
> gcc-12), where I used to get fails after an unsupported modules.exp
> test, but there are no curly braces in the log files after the patch.
> Ok to install?

Ok.
  
Thomas Schwinge April 5, 2023, 7:47 a.m. UTC | #6
Hi Alexandre!

On 2023-03-30T10:51:32-0300, Alexandre Oliva via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
> On Mar 30, 2023, Alexandre Oliva <oliva@adacore.com> wrote:
>
>> If we're dropping the renaming, I suppose we could also revert Jakub's
>> change.  I suppose this patch will take care of it, pending testing...
>
> Regstrapped on x86_64-linux-gnu and also tested on arm-vx7r2 (with
> gcc-12), where I used to get fails after an unsupported modules.exp
> test, but there are no curly braces in the log files after the patch.
> Ok to install?

Given the two "OK"s that you got end of last week, are you going to push
that anytime soon, please?

With...

    Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>

... added, I suppose.


Grüße
 Thomas


> [PR108899] testsuite: fix proc unsupported overriding in modules.exp
>
> The overrider of proc unsupported in modules.exp had two problems
> reported by Thomas Schwinge, even after Jakub Jelínek's fix:
>
> - it remained in effect while running other dejagnu testsets
>
> - it didn't quote correctly the argument list passed to it, which
>   caused test names to be surrounded by curly braces, as in:
>
> UNSUPPORTED: {...}
>
> This patch fixes both issues, obsoleting and reverting Jakub's change,
> by dropping the overrider and renaming the saved proc back, and by
> using uplevel's argument list splicing.
>
>
> for  gcc/testsuite/ChangeLog
>
>       PR testsuite/108899
>       * g++.dg/modules/modules.exp (unsupported): Drop renaming.
>       Fix quoting.
> ---
>  gcc/testsuite/g++.dg/modules/modules.exp |   20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp
> index 80aa392bc7f3b..dc302d3d0af48 100644
> --- a/gcc/testsuite/g++.dg/modules/modules.exp
> +++ b/gcc/testsuite/g++.dg/modules/modules.exp
> @@ -319,15 +319,11 @@ cleanup_module_files [find $DEFAULT_REPO *.gcm]
>  # so that, after an unsupported result in dg-test, we can skip rather
>  # than fail subsequent related tests.
>  set module_do {"compile" "P"}
> -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]
> -    }
> +rename unsupported modules-saved-unsupported
> +proc unsupported { args } {
> +    global module_do
> +    lset module_do 1 "N"
> +    return [uplevel 1 modules-saved-unsupported $args]
>  }
>
>  # not grouped tests, sadly tcl doesn't have negated glob
> @@ -412,4 +408,10 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
>      }
>  }
>
> +# Restore the original unsupported proc, lest it will affect
> +# subsequent test runs, or even fail renaming if we run modules.exp
> +# for multiple targets/multilibs/options.
> +rename unsupported {}
> +rename modules-saved-unsupported unsupported
> +
>  dg-finish
>
>
-----------------
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
  
Alexandre Oliva April 6, 2023, 2:38 a.m. UTC | #7
On Apr  5, 2023, Thomas Schwinge <thomas@codesourcery.com> wrote:

> Given the two "OK"s that you got end of last week, are you going to push
> that anytime soon, please?

Apologies for the delay.

> With...

>     Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>

> ... added, I suppose.

I wrote the patch based on your report, before even seeing your patch,
though I only posted mine later, so I tried to give you credit for the
report in the commit message, but if you feel that the note is
appropriate, sure :-)  Thanks again!

Here's what I'm checking in.


testsuite: fix proc unsupported overriding in modules.exp [PR108899]

The overrider of proc unsupported in modules.exp had two problems
reported by Thomas Schwinge, even after Jakub Jelínek's fix:

- it remained in effect while running other dejagnu testsets

- it didn't quote correctly the argument list passed to it, which
  caused test names to be surrounded by curly braces, as in:

UNSUPPORTED: {...}

This patch fixes both issues, obsoleting and reverting Jakub's change,
by dropping the overrider and renaming the saved proc back, and by
using uplevel's argument list splicing.


Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>

for  gcc/testsuite/ChangeLog

	PR testsuite/108899
	* g++.dg/modules/modules.exp (unsupported): Drop renaming.
	Fix quoting.
---
 gcc/testsuite/g++.dg/modules/modules.exp |   20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp
index 80aa392bc7f3b..dc302d3d0af48 100644
--- a/gcc/testsuite/g++.dg/modules/modules.exp
+++ b/gcc/testsuite/g++.dg/modules/modules.exp
@@ -319,15 +319,11 @@ cleanup_module_files [find $DEFAULT_REPO *.gcm]
 # so that, after an unsupported result in dg-test, we can skip rather
 # than fail subsequent related tests.
 set module_do {"compile" "P"}
-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]
-    }
+rename unsupported modules-saved-unsupported
+proc unsupported { args } {
+    global module_do
+    lset module_do 1 "N"
+    return [uplevel 1 modules-saved-unsupported $args]
 }
 
 # not grouped tests, sadly tcl doesn't have negated glob
@@ -412,4 +408,10 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
     }
 }
 
+# Restore the original unsupported proc, lest it will affect
+# subsequent test runs, or even fail renaming if we run modules.exp
+# for multiple targets/multilibs/options.
+rename unsupported {}
+rename modules-saved-unsupported unsupported
+
 dg-finish
  
Thomas Schwinge April 6, 2023, 8:11 p.m. UTC | #8
Hi Alexandre!

On 2023-04-05T23:38:43-0300, Alexandre Oliva via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
> On Apr  5, 2023, Thomas Schwinge <thomas@codesourcery.com> wrote:
>> With...
>
>>     Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
>
>> ... added, I suppose.
>
> I wrote the patch based on your report, before even seeing your patch

Eh, given your "Ooh, nice, I didn't know [...]" comment in
<https://inbox.sourceware.org/gcc/orr0t6n2q4.fsf@lxoliva.fsfla.org>:

On 2023-03-30T04:00:03-0300, Alexandre Oliva via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
| On Mar 29, 2023, Thomas Schwinge <thomas@codesourcery.com> wrote:
|> ..., 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?
|
| Ooh, nice, I didn't know how to drop the renaming after we were done
| with it, [...]

..., I had certainly assumed that you'd learned "how to drop [...]" from
looking at my patch.

> though I only posted mine later, so I tried to give you credit for the
> report in the commit message, but if you feel that the note is
> appropriate, sure :-)  Thanks again!

Thanks.


> Here's what I'm checking in.
>
>
> testsuite: fix proc unsupported overriding in modules.exp [PR108899]
>
> The overrider of proc unsupported in modules.exp had two problems
> reported by Thomas Schwinge, even after Jakub Jelínek's fix:
>
> - it remained in effect while running other dejagnu testsets
>
> - it didn't quote correctly the argument list passed to it, which
>   caused test names to be surrounded by curly braces, as in:
>
> UNSUPPORTED: {...}
>
> This patch fixes both issues

Confirmed, thanks.


Grüße
 Thomas


> obsoleting and reverting Jakub's change,
> by dropping the overrider and renaming the saved proc back, and by
> using uplevel's argument list splicing.
>
>
> Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
>
> for  gcc/testsuite/ChangeLog
>
>       PR testsuite/108899
>       * g++.dg/modules/modules.exp (unsupported): Drop renaming.
>       Fix quoting.
> ---
>  gcc/testsuite/g++.dg/modules/modules.exp |   20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp
> index 80aa392bc7f3b..dc302d3d0af48 100644
> --- a/gcc/testsuite/g++.dg/modules/modules.exp
> +++ b/gcc/testsuite/g++.dg/modules/modules.exp
> @@ -319,15 +319,11 @@ cleanup_module_files [find $DEFAULT_REPO *.gcm]
>  # so that, after an unsupported result in dg-test, we can skip rather
>  # than fail subsequent related tests.
>  set module_do {"compile" "P"}
> -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]
> -    }
> +rename unsupported modules-saved-unsupported
> +proc unsupported { args } {
> +    global module_do
> +    lset module_do 1 "N"
> +    return [uplevel 1 modules-saved-unsupported $args]
>  }
>
>  # not grouped tests, sadly tcl doesn't have negated glob
> @@ -412,4 +408,10 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] {
>      }
>  }
>
> +# Restore the original unsupported proc, lest it will affect
> +# subsequent test runs, or even fail renaming if we run modules.exp
> +# for multiple targets/multilibs/options.
> +rename unsupported {}
> +rename modules-saved-unsupported unsupported
> +
>  dg-finish
>
>
>
-----------------
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
  
Alexandre Oliva April 6, 2023, 11:40 p.m. UTC | #9
On Apr  6, 2023, Thomas Schwinge <thomas@codesourcery.com> wrote:

> Eh, given your "Ooh, nice, I didn't know [...]" comment in
> <https://inbox.sourceware.org/gcc/orr0t6n2q4.fsf@lxoliva.fsfla.org>:

Oh my, you're right, I apologize, I misremembered.  When I wrote "before
I saw your patch" yesterday, I meant the formal, already-tested patch
submission, that I recall seeing while I tested the patchlet I'd posted.
I forgot you had included that patch also in the initial report, but I
see it there too.
https://gcc.gnu.org/pipermail/gcc-patches/2023-March/614884.html
https://gcc.gnu.org/pipermail/gcc-patches/2023-March/614880.html
https://gcc.gnu.org/pipermail/gcc-patches/2023-March/614857.html

I learned that tcl trick from you indeed, and that much I remember
clearly: I've long sought but failed to find a way to do that.

Alas, for some reason, I had a misrecollection that you had merely
recommended using that trick, instead of including an actual patch, in
the report I claimed to have based the patch on.  I suppose I may have
drawn that wrong conclusion from my having set out to write a patch
myself, instead of recommending the approval of yours.  That, in turn,
was presumably because there was an additional issue that needed fixing,
and that you had asked me to look into.  Anyhow, it's probably a safe
bet that I based our patch on yours indeed, but I wouldn't be able to
confirm or deny it either way: those details have unfortunately faded
away from my memory.

Anyway, it was based on the misrecollection that I stated "before even
seeing your patch", and I acknowledge that I was wrong, and probably
also overthinking the whole issue ;-)

Please accept my embarrassed apologies.  I think I had better memory
when I was younger, but I'm not really sure, I can't recall ;-D
  

Patch

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