gdb/testsuite: fix test failure when building against readline v7
authorAndrew Burgess <aburgess@redhat.com>
Sat, 26 Mar 2022 13:41:33 +0000 (13:41 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Tue, 29 Mar 2022 13:39:58 +0000 (14:39 +0100)
The test added in the commit:

  commit a6b413d24ccc5d76179bab866834e11fd6fec294
  Date:   Fri Mar 11 14:44:03 2022 +0000

      gdb: work around prompt corruption caused by bracketed-paste-mode

Was not written with readline 7 in mind, only readline 8+.  Between
readline 7 and 8 the escape sequence used to disable bracketed paste
mode changed, an additional '\r' character was added to the end.  In
fact, it was the addition of this '\r' character that triggered the
issue for which the above commit is part of the solution.

Anyway, the test tries to spot the case where the output from GDB is
not perfect, but does have the above work around applied.  However,
the pattern in the test assumes that the problematic '\r' will be
present, and this is only true for readline 8+.  With readline 7 the
test was failing.

In this commit I generalise the pattern a little so that the test will
still KFAIL with readline 7.

It's a little unfortunate that the test is KFAILing with readline 7,
as without the problematic '\r' there's actually no reason that GDB
couldn't "do the right thing" in this case, in which case, the test
would PASS, but that would require changes within GDB itself.

My preference then is that initially we patch the test to get it
KFAILing, then in a separate commit I can modify GDB so that it can
PASS with readline 7.

gdb/testsuite/gdb.base/eof-exit.exp

index d604d029974a86809ec6fff90e1a2db5765de2ec..2d9530ccebe9584314f28c5aed37f7af656816b8 100644 (file)
@@ -38,7 +38,7 @@ proc run_test {} {
        -re "$::gdb_prompt \[^\n\]*\r\[^\n\]*quit" {
            fail "$gdb_test_name (misplaced \\r)"
        }
-       -re "$::gdb_prompt \[^\n\]*\r\[^\n\]*\r\nquit\r\n" {
+       -re "$::gdb_prompt (?:\[^\n\]*\r)?\[^\n\]*\r\nquit\r\n" {
            # For versions of readline that don't include the
            # RL_STATE_EOF patch, then the 'quit' is printed on the
            # subsequent line.