This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
[binutils-gdb/gdb-7.10-branch] PR gdb/17960 Internal error: tracker != NULL when completing on file:function
- From: Doug Evans <devans at sourceware dot org>
- To: gdb-cvs at sourceware dot org
- Date: 10 Aug 2015 20:38:55 -0000
- Subject: [binutils-gdb/gdb-7.10-branch] PR gdb/17960 Internal error: tracker != NULL when completing on file:function
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3649abf39ee70a6237a06df85cf027dcc0d03c56
commit 3649abf39ee70a6237a06df85cf027dcc0d03c56
Author: Doug Evans <dje@google.com>
Date: Mon Aug 10 13:37:46 2015 -0700
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.
Diff:
---
gdb/ChangeLog | 8 ++++
gdb/symtab.c | 38 +++++++++++++---
gdb/testsuite/ChangeLog | 6 +++
gdb/testsuite/gdb.base/completion.exp | 82 +++++++++++++++++++++++++++++++++++
4 files changed, 129 insertions(+), 5 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4d4e8dd..e48068c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2015-08-10 Doug Evans <dje@google.com>
+ Keith Seitz <keiths@redhat.com>
+
+ PR gdb/17960
+ * 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.
+
2015-08-06 Clem Dickey <clemd@acm.org>
PR python/17136
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 2b6af6c..7d3b228 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -5598,9 +5598,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;
@@ -5656,8 +5656,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);
@@ -5693,6 +5691,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. */
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 9445c2c..6357c87 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-08-10 Doug Evans <dje@google.com>
+ Keith Seitz <keiths@redhat.com>
+
+ PR gdb/17960
+ * gdb.base/completion.exp: Add location completer tests.
+
2015-08-06 Pedro Alves <palves@redhat.com>
* gdb.threads/forking-threads-plus-breakpoint.exp: New file.
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index 1eb0fd8..f0e4dec 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -777,6 +777,88 @@ gdb_test_multiple "" "$test" {
}
#
+# Tests for the location completer
+#
+
+# Turn off pending breakpoint support so that we don't get queried
+# all the time.
+gdb_test_no_output "set breakpoint pending off"
+
+set subsrc [string range $srcfile 0 [expr {[string length $srcfile] - 3}]]
+set test "tab complete break $subsrc"
+send_gdb "break $subsrc\t\t"
+gdb_test_multiple "" $test {
+ -re "break\.c.*break1\.c.*$gdb_prompt " {
+ send_gdb "1\t\n"
+ gdb_test_multiple "" $test {
+ -re ".*Function \"$srcfile2\" not defined\..*$gdb_prompt " {
+ pass $test
+ }
+ -re "$gdb_prompt p$" {
+ fail $test
+ }
+ }
+ }
+
+ -re "$gdb_prompt p$" {
+ fail $test
+ }
+}
+
+gdb_test "complete break $subsrc" "break\.c.*break1\.c"
+
+set test "tab complete break need"
+send_gdb "break need\t"
+gdb_test_multiple "" $test {
+ -re "break need_malloc " {
+ send_gdb "\n"
+ gdb_test_multiple "" $test {
+ -re ".*Breakpoint.*at .*/$srcfile, line .*$gdb_prompt " {
+ pass $test
+ gdb_test_no_output "delete breakpoint \$bpnum" \
+ "delete breakpoint for $test"
+ }
+ -re "$gdb_prompt p$" {
+ fail $test
+ }
+ }
+ }
+ -re "$gdb_prompt p$" {
+ fail $test
+ }
+}
+
+gdb_test "complete break need" "need_malloc"
+
+# gdb/17960
+# Enabling max-completions is necessary to trigger the bug.
+gdb_test_no_output "set max-completions 10"
+set test "tab complete break $srcfile:ma"
+send_gdb "break $srcfile:ma\t"
+gdb_test_multiple "" $test {
+ -re "break $srcfile:main " {
+ send_gdb "\n"
+ gdb_test_multiple "" $test {
+ -re ".*Breakpoint.*at .*/$srcfile, line .*$gdb_prompt " {
+ pass $test
+ gdb_test_no_output "delete breakpoint \$bpnum" \
+ "delete breakpoint for $test"
+ }
+ -re "$gdb_prompt p$" {
+ fail $test
+ }
+ }
+ }
+ -re "$gdb_prompt p$" {
+ fail $test
+ }
+}
+
+gdb_test "complete break $srcfile:ma" "break\.c:main"
+
+# End of gdb/17960 testing.
+
+#
# Completion limiting.
#