Missing do_cleanups in ada_make_symbol_completion_list.

This results in an internal-warning when trying the completion
when in Ada mode:

    (gdb) b simple<TAB>
    /[...]/cleanups.c:265: internal-warning: restore_my_cleanups has found a stale cleanup
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n)

gdb/ChangeLog:

        * ada-lang.c (ada_make_symbol_completion_list): Make sure
        all cleanups are done before returning from this function.

gdb/testsuite/ChangeLog:

        * gdb.ada/complete.exp: Add test verifying completion using
        the "tab" key.
This commit is contained in:
Joel Brobecker 2013-05-16 07:02:43 +00:00
parent d5c48113b6
commit b8fea896fe
4 changed files with 28 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2013-05-16 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c (ada_make_symbol_completion_list): Make sure
all cleanups are done before returning from this function.
2013-05-15 Joel Brobecker <brobecker@adacore.com>
* utils.h: #include "exceptions.h".

View File

@ -5841,6 +5841,7 @@ ada_make_symbol_completion_list (const char *text0, const char *word,
struct block *b, *surrounding_static_block = 0;
int i;
struct block_iterator iter;
struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
gdb_assert (code == TYPE_CODE_UNDEF);
@ -5941,6 +5942,7 @@ ada_make_symbol_completion_list (const char *text0, const char *word,
}
}
do_cleanups (old_chain);
return completions;
}

View File

@ -1,3 +1,8 @@
2013-05-16 Joel Brobecker <brobecker@adacore.com>
* gdb.ada/complete.exp: Add test verifying completion using
the "tab" key.
2013-05-15 Pedro Alves <palves@redhat.com>
* gdb.base/fixsection.c: Remove attribution.

View File

@ -175,4 +175,19 @@ test_gdb_complete "pck." \
test_gdb_complete "<pck__my" \
"p <pck__my_global_variable>"
# Very simple completion, but using the interactive form, this time.
# The verification we are trying to make involves the event loop,
# and using the "complete" command is not sufficient to reproduce
# the original problem.
set test "interactive complete 'print some'"
send_gdb "print some\t"
gdb_test_multiple "" "$test" {
-re "^print some_local_variable $" {
send_gdb "\n"
gdb_test_multiple "" "$test" {
-re " = 1$eol$gdb_prompt $" {
pass "$test"
}
}
}
}