This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Expression completer should not match explicit location options


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=eb17d4137dc83a373b8968cd20b256fa8073a4ca

commit eb17d4137dc83a373b8968cd20b256fa8073a4ca
Author: Pedro Alves <palves@redhat.com>
Date:   Thu Jun 29 15:52:38 2017 +0100

    Expression completer should not match explicit location options
    
    This commit fixes a mismatch between what "print" command completer
    thinks the command understands, and what the command actually
    understands.
    
    The explicit location options are understood by commands that take
    (linespecs and) explicit locations as argument.  I.e, breakpoint
    commands, and "list".  For example:
    
     (gdb) b -source file.c -function my_func
    
    So for those commands, it makes sense that the completer
    completes:
    
     "b -sour[TAB]" -> "b -source "
     "b -functi[TAB]" -> "b -function "
    
    etc.
    
    However, completion for commands that take expressions (not
    linespecs/locations) as arguments, such as the "print" command, also
    completes the explicit location options, even though those switches
    aren't really understood by these commands.  Instead, "-foo" is
    understood as an expression applying unary minus on a symbol named
    "foo" (think "print -1"):
    
     (gdb) p -func[TAB]
     (gdb) p -function [RET]
     No symbol "function" in current context.
    
    The patch fixes this by having the expression_completer function
    bypass the function that completes explicit locations.
    
    New regression tests included.
    
    gdb/ChangeLog:
    2017-06-29  Pedro Alves  <palves@redhat.com>
    
    	* completer.c (expression_completer): Call
    	linespec_location_completer instead of location_completer.
    
    gdb/testsuite/ChangeLog:
    2017-06-29  Pedro Alves  <palves@redhat.com>
    
    	* gdb.base/printcmds.exp: Add tests.

Diff:
---
 gdb/ChangeLog                        | 5 +++++
 gdb/completer.c                      | 2 +-
 gdb/testsuite/ChangeLog              | 4 ++++
 gdb/testsuite/gdb.base/printcmds.exp | 6 ++++++
 4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c76158f..b47226bc 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
 2017-06-29  Pedro Alves  <palves@redhat.com>
 
+	* completer.c (expression_completer): Call
+	linespec_location_completer instead of location_completer.
+
+2017-06-29  Pedro Alves  <palves@redhat.com>
+
 	* completer.c (expression_completer): Remove code that recomputes
 	'text' from 'word'.
 
diff --git a/gdb/completer.c b/gdb/completer.c
index f152dd5..68e68eb 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -635,7 +635,7 @@ expression_completer (struct cmd_list_element *ignore,
   xfree (fieldname);
 
   /* Not ideal but it is what we used to do before...  */
-  return location_completer (ignore, text, word);
+  return linespec_location_completer (ignore, text, word);
 }
 
 /* See definition in completer.h.  */
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index b7462a5..41c5434 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-06-29  Pedro Alves  <palves@redhat.com>
+
+	* gdb.base/printcmds.exp: Add tests.
+
 2017-06-28  Doug Gilmore  <Doug.Gilmore@imgtec.com>
 
 	PR gdb/21337
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp
index d949b30..323ca73 100644
--- a/gdb/testsuite/gdb.base/printcmds.exp
+++ b/gdb/testsuite/gdb.base/printcmds.exp
@@ -931,6 +931,12 @@ gdb_test "ptype \"abc\"" " = char \\\[4\\\]"
 gdb_test "print \$cvar = \"abc\"" " = \"abc\""
 gdb_test "print sizeof (\$cvar)" " = 4"
 
+# GDB used to complete the explicit location options even when
+# printing expressions.
+gdb_test_no_output "complete p -function"
+gdb_test_no_output "complete p -line"
+gdb_test_no_output "complete p -source"
+
 gdb_file_cmd ${binfile}
 
 gdb_test "print \$pc" "No registers\\." "print \$pc (with file)"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]