diff options
author | Doug Evans <dje@google.com> | 2015-08-10 12:23:09 -0700 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2015-08-10 12:23:09 -0700 |
commit | e27852be65403306da198b3c1d7b222acd6bdfe9 (patch) | |
tree | 0c62fa6fa515cbde26bf7121086fab9dea124c39 /gdb/symtab.c | |
parent | fd7dcb94cbd44629b3929336aec8b76c3e339656 (diff) | |
download | gdb-e27852be65403306da198b3c1d7b222acd6bdfe9.zip gdb-e27852be65403306da198b3c1d7b222acd6bdfe9.tar.gz gdb-e27852be65403306da198b3c1d7b222acd6bdfe9.tar.bz2 |
PR gdb/17960 Internal error: tracker != NULL when completing on file:function
gdb/ChangeLog:
* symtab.c (make_file_symbol_completion_list_1): Renamed from
make_file_symbol_completion_list and made static.
(make_file_symbol_completion_list): New function.
gdb/testsuite/ChangeLog:
* gdb.base/completion.exp: Add location completer tests.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r-- | gdb/symtab.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index ebafe53..5278265 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -5604,9 +5604,9 @@ make_symbol_completion_list_fn (struct cmd_list_element *ignore, /* Like make_symbol_completion_list, but returns a list of symbols defined in a source file FILE. */ -VEC (char_ptr) * -make_file_symbol_completion_list (const char *text, const char *word, - const char *srcfile) +static VEC (char_ptr) * +make_file_symbol_completion_list_1 (const char *text, const char *word, + const char *srcfile) { struct symbol *sym; struct symtab *s; @@ -5662,8 +5662,6 @@ make_file_symbol_completion_list (const char *text, const char *word, sym_text_len = strlen (sym_text); - return_val = NULL; - /* Find the symtab for SRCFILE (this loads it if it was not yet read in). */ s = lookup_symtab (srcfile); @@ -5699,6 +5697,36 @@ make_file_symbol_completion_list (const char *text, const char *word, return (return_val); } +/* Wrapper around make_file_symbol_completion_list_1 + to handle MAX_COMPLETIONS_REACHED_ERROR. */ + +VEC (char_ptr) * +make_file_symbol_completion_list (const char *text, const char *word, + const char *srcfile) +{ + struct cleanup *back_to, *cleanups; + + completion_tracker = new_completion_tracker (); + cleanups = make_cleanup_free_completion_tracker (&completion_tracker); + return_val = NULL; + back_to = make_cleanup (do_free_completion_list, &return_val); + + TRY + { + make_file_symbol_completion_list_1 (text, word, srcfile); + } + CATCH (except, RETURN_MASK_ERROR) + { + if (except.error != MAX_COMPLETIONS_REACHED_ERROR) + throw_exception (except); + } + END_CATCH + + discard_cleanups (back_to); + do_cleanups (cleanups); + return return_val; +} + /* A helper function for make_source_files_completion_list. It adds another file name to a list of possible completions, growing the list as necessary. */ |