gdb_test_multiple: return -1 on internal error
authorPedro Alves <palves@redhat.com>
Mon, 2 Mar 2015 20:05:25 +0000 (20:05 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 2 Mar 2015 20:05:25 +0000 (20:05 +0000)
gdb_test_multiple is supposed to return -1 on internal error:

  # Returns:
  #    1 if the test failed, according to a built-in failure pattern
  #    0 if only user-supplied patterns matched
  #   -1 if there was an internal error.

But alas, that's broken, it returns success...  It looks like the code
is assuming an earlier 'set result -1' is still in effect, but
'result' is set to 0 at the end, just before we call gdb_expect:

    set result 0
    set code [catch {gdb_expect $code} string]

gdb/testsuite/
2015-03-02  Pedro Alves  <palves@redhat.com>

* lib/gdb.exp (gdb_test_multiple) <internal error>: Set result to
-1.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdb.exp

index 880e67437d10060ead5f01d461839f8f727e513e..76ed5e2fd0bd625f07b17cd89bd765e9e467a6d1 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-02  Pedro Alves  <palves@redhat.com>
+
+       * lib/gdb.exp (gdb_test_multiple) <internal error>: Set result to
+       -1.
+
 2015-03-02  Andreas Arnez  <arnez@linux.vnet.ibm.com>
 
        * gdb.arch/s390-vregs.exp: New test.
index 08db806c79f8df71c4416d537e0a377506b27fba..f274b64d1fc92808bc789f7e6dddf8b70a066cb9 100644 (file)
@@ -808,6 +808,7 @@ proc gdb_test_multiple { command message user_code } {
        -re ".*A problem internal to GDB has been detected" {
            fail "$message (GDB internal error)"
            gdb_internal_error_resync
+           set result -1
        }
        -re "\\*\\*\\* DOSEXIT code.*" {
            if { $message != "" } {