Subject: bug#41824: Dejagnu's unknown proc aborts testsuite run when triggered in test-case

From: Pedro Alves <[email-masked]>
Date: Fri, 26 Jun 2020 11:08:11 +0100

On 6/26/20 10:53 AM, Pedro Alves wrote:
> 
>> to repeat at the very end of a test run with a big warning about test cases that crashed?
> I did not suggest to repeat anything.
> 

I misunderstood you here -- I somehow thought that that by "repeat" you meant
re-running the testcase.

Still, I would not suggest to repeat the error.  Let me clarify -- with this:

~~~~
diff --git c/gdb/testsuite/gdb.base/break.exp w/gdb/testsuite/gdb.base/break.exp
index 8c7ce42d805..056252c0677 100644
--- c/gdb/testsuite/gdb.base/break.exp
+++ w/gdb/testsuite/gdb.base/break.exp
@@ -15,6 +15,9 @@
 
 # This file was written by Rob Savoye. ([email-masked])
 
+set a 1
+set a(1) 1
+
~~~~

You get, if you run two testcases, and the other one manages to run
first:

$ make check TESTS="*/break.exp */schedlock.exp" 
make[1]: Entering directory '/home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite'
Nothing to be done for all...
make check-single
make[2]: Entering directory '/home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite'
rootme=`pwd`; export rootme; srcdir=/home/pedro/gdb/mygit/src/gdb/testsuite ; export srcdir ; EXPECT=`if [ "${READ1}" != "" ] ; then echo ${rootme}/expect-read1; elif [ -f ${rootme}/../../expect/expect ] ; then echo ${rootme}/../../expect/expect ; else echo expect ; fi` ; export EXPECT ; EXEEXT= ; export EXEEXT ;    LD_LIBRARY_PATH=$rootme/../../expect:$rootme/../../libstdc++:$rootme/../../tk/unix:$rootme/../../tcl/unix:$rootme/../../bfd:$rootme/../../opcodes:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; if [ -f ${rootme}/../../expect/expect ] ; then TCL_LIBRARY=${srcdir}/../../tcl/library ; export TCL_LIBRARY ; fi ; runtest --status  gdb.base/break.exp gdb.threads/schedlock.exp 
NOTE: Dejagnu's default_target_compile is missing support for Go, using local override
NOTE: Dejagnu's default_target_compile is missing support for Rust, using local override
Test run by pedro on Fri Jun 26 11:03:38 2020
Native configuration is x86_64-pc-linux-gnu

                === gdb tests ===

Schedule of variations:
    unix

Running target unix
Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target.
Using /usr/share/dejagnu/config/unix.exp as generic interface file for target.
Using /home/pedro/gdb/mygit/src/gdb/testsuite/config/unix.exp as tool-and-target-specific interface file.
Running /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.threads/schedlock.exp ...
Running /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/break.exp ...
ERROR: tcl error sourcing /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/break.exp.
ERROR: can't set "a(1)": variable isn't array
    while executing
"set a(1) 1"
    (file "/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/break.exp" line 19)
    invoked from within
"source /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/break.exp"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 source /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/break.exp"
    invoked from within
"catch "uplevel #0 source $test_file_name""

                === gdb Summary ===

# of expected passes            208
/home/pedro/brno/pedro/gdb/mygit/build/gdb/gdb version  10.0.50.20200625-git -nw -nx -data-directory /home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite/../data-directory 

make[2]: *** [Makefile:206: check-single] Error 2
make[2]: Leaving directory '/home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite'
make[1]: *** [Makefile:159: check] Error 2
make[1]: Leaving directory '/home/pedro/brno/pedro/gdb/mygit/build/gdb/testsuite'
make: *** [Makefile:1628: check] Error 2

~~~~

Now, you already have an indication that something went wrong
because make existed with error.  But people may miss that.
The issue for me is that the "gdb Summary" tally did not
mention the aborted testcase.  I would like to see something
like this instead:

 # of expected passes            208
 # of nasty OMG FIX! tcl errors    1

:-)

Your UNRESOLVED is of course better than the status quo.

Thanks,
Pedro Alves