public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Pass void_context_p to parse_expression
@ 2020-12-18 15:12 Tom Tromey
  2020-12-27  6:20 ` Joel Brobecker
  0 siblings, 1 reply; 4+ messages in thread
From: Tom Tromey @ 2020-12-18 15:12 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

An earlier patch pointed out that nothing in GDB sets void_context_p
when parsing an expression.  This patch fixes this omission.

"print" and "call" differ in that the former will print a value that
has void type, while the latter will not.  AdaCore has had a patch for
a long time that uses this distinction to help with overload
resolution.  In particular, in a "call" context, a procedure will be
chosen, while in a "print" context, a zero-argument function will be
chosen instead.

Regression tested on x86-64 Fedora 32.

gdb/ChangeLog
2020-12-18  Tom Tromey  <tromey@adacore.com>

	* parse.c (parse_expression): Add void_context_p parameter.  Use
	parse_exp_in_context.
	* printcmd.c (print_command_1): Change voidprint to bool.  Pass to
	parse_expression.
	(print_command, call_command): Update.
	* expression.h (parse_expression): Add void_context_p parameter.

gdb/testsuite/ChangeLog
2020-12-18  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/voidctx/pck.adb: New file.
	* gdb.ada/voidctx/pck.ads: New file.
	* gdb.ada/voidctx/voidctx.adb: New file.
	* gdb.ada/voidctx.exp: New file.
---
 gdb/ChangeLog                             |  9 +++++++
 gdb/expression.h                          |  3 ++-
 gdb/parse.c                               | 15 ++++++++---
 gdb/printcmd.c                            | 10 ++++---
 gdb/testsuite/ChangeLog                   |  7 +++++
 gdb/testsuite/gdb.ada/voidctx.exp         | 33 +++++++++++++++++++++++
 gdb/testsuite/gdb.ada/voidctx/pck.adb     | 26 ++++++++++++++++++
 gdb/testsuite/gdb.ada/voidctx/pck.ads     | 19 +++++++++++++
 gdb/testsuite/gdb.ada/voidctx/voidctx.adb | 31 +++++++++++++++++++++
 9 files changed, 144 insertions(+), 9 deletions(-)
 create mode 100644 gdb/testsuite/gdb.ada/voidctx.exp
 create mode 100644 gdb/testsuite/gdb.ada/voidctx/pck.adb
 create mode 100644 gdb/testsuite/gdb.ada/voidctx/pck.ads
 create mode 100644 gdb/testsuite/gdb.ada/voidctx/voidctx.adb

diff --git a/gdb/expression.h b/gdb/expression.h
index c07111c316f..2abf2d280d6 100644
--- a/gdb/expression.h
+++ b/gdb/expression.h
@@ -120,7 +120,8 @@ typedef std::unique_ptr<expression> expression_up;
 
 class innermost_block_tracker;
 extern expression_up parse_expression (const char *,
-				       innermost_block_tracker * = nullptr);
+				       innermost_block_tracker * = nullptr,
+				       bool void_context_p = false);
 
 extern expression_up parse_expression_with_language (const char *string,
 						     enum language lang);
diff --git a/gdb/parse.c b/gdb/parse.c
index 80a67c6c707..1d98a6d9e0c 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -1158,13 +1158,20 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
   return result;
 }
 
-/* Parse STRING as an expression, and complain if this fails
-   to use up all of the contents of STRING.  */
+/* Parse STRING as an expression, and complain if this fails to use up
+   all of the contents of STRING.  TRACKER, if non-null, will be
+   updated by the parser.  VOID_CONTEXT_P should be true to indicate
+   that the expression may be expected to return a value with void
+   type.  Parsers are free to ignore this, or to use it to help with
+   overload resolution decisions.  */
 
 expression_up
-parse_expression (const char *string, innermost_block_tracker *tracker)
+parse_expression (const char *string, innermost_block_tracker *tracker,
+		  bool void_context_p)
 {
-  expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
+  expression_up exp = parse_exp_in_context (&string, 0, nullptr, 0,
+					    void_context_p, nullptr,
+					    tracker, nullptr);
   if (*string)
     error (_("Junk after end of expression."));
   return exp;
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index de083a2a768..2de5f32cc7c 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -1206,7 +1206,7 @@ print_value (value *val, const value_print_options &opts)
 /* Implementation of the "print" and "call" commands.  */
 
 static void
-print_command_1 (const char *args, int voidprint)
+print_command_1 (const char *args, bool voidprint)
 {
   struct value *val;
   value_print_options print_opts;
@@ -1223,7 +1223,9 @@ print_command_1 (const char *args, int voidprint)
 
   if (exp != nullptr && *exp)
     {
-      expression_up expr = parse_expression (exp);
+      /* VOIDPRINT is true to indicate that we do want to print a void
+	 value, so invert it for parse_expression.  */
+      expression_up expr = parse_expression (exp, nullptr, !voidprint);
       val = evaluate_expression (expr.get ());
     }
   else
@@ -1321,14 +1323,14 @@ print_command_completer (struct cmd_list_element *ignore,
 static void
 print_command (const char *exp, int from_tty)
 {
-  print_command_1 (exp, 1);
+  print_command_1 (exp, true);
 }
 
 /* Same as print, except it doesn't print void results.  */
 static void
 call_command (const char *exp, int from_tty)
 {
-  print_command_1 (exp, 0);
+  print_command_1 (exp, false);
 }
 
 /* Implementation of the "output" command.  */
diff --git a/gdb/testsuite/gdb.ada/voidctx.exp b/gdb/testsuite/gdb.ada/voidctx.exp
new file mode 100644
index 00000000000..7e38cad0f7e
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx.exp
@@ -0,0 +1,33 @@
+# Copyright 2020 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile voidctx
+
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+  return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/voidctx.adb]
+runto "voidctx.adb:$bp_location"
+
+gdb_test "print DoSomething" " = 42"
+gdb_test_no_output "call DoSomething"
+
diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.adb b/gdb/testsuite/gdb.ada/voidctx/pck.adb
new file mode 100644
index 00000000000..5b8bdfe6a29
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx/pck.adb
@@ -0,0 +1,26 @@
+--  Copyright 2020 Free Software Foundation, Inc.
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   function DoSomething return Integer is
+   begin
+      return 42;
+   end;
+
+   procedure DoSomething is
+   begin
+      null;
+   end;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.ads b/gdb/testsuite/gdb.ada/voidctx/pck.ads
new file mode 100644
index 00000000000..71d891a9bea
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx/pck.ads
@@ -0,0 +1,19 @@
+--  Copyright 2020 Free Software Foundation, Inc.
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+   function DoSomething return Integer;
+   procedure DoSomething;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/voidctx/voidctx.adb b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
new file mode 100644
index 00000000000..fcf7af73f05
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
@@ -0,0 +1,31 @@
+--  Copyright 2020 Free Software Foundation, Inc.
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+procedure Voidctx is	      
+
+   function DoSomething return Integer is
+   begin
+      return 42;
+   end;
+
+   procedure DoSomething is
+   begin
+      null;
+   end;
+
+begin
+   null;  -- STOP
+end Voidctx;
-- 
2.26.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Pass void_context_p to parse_expression
  2020-12-18 15:12 [PATCH] Pass void_context_p to parse_expression Tom Tromey
@ 2020-12-27  6:20 ` Joel Brobecker
  2021-01-07 13:55   ` Tom Tromey
  0 siblings, 1 reply; 4+ messages in thread
From: Joel Brobecker @ 2020-12-27  6:20 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

Hi Tom,

On Fri, Dec 18, 2020 at 08:12:18AM -0700, Tom Tromey wrote:
> An earlier patch pointed out that nothing in GDB sets void_context_p
> when parsing an expression.  This patch fixes this omission.
> 
> "print" and "call" differ in that the former will print a value that
> has void type, while the latter will not.  AdaCore has had a patch for
> a long time that uses this distinction to help with overload
> resolution.  In particular, in a "call" context, a procedure will be
> chosen, while in a "print" context, a zero-argument function will be
> chosen instead.
> 
> Regression tested on x86-64 Fedora 32.
> 
> gdb/ChangeLog
> 2020-12-18  Tom Tromey  <tromey@adacore.com>
> 
> 	* parse.c (parse_expression): Add void_context_p parameter.  Use
> 	parse_exp_in_context.
> 	* printcmd.c (print_command_1): Change voidprint to bool.  Pass to
> 	parse_expression.
> 	(print_command, call_command): Update.
> 	* expression.h (parse_expression): Add void_context_p parameter.
> 
> gdb/testsuite/ChangeLog
> 2020-12-18  Tom Tromey  <tromey@adacore.com>
> 
> 	* gdb.ada/voidctx/pck.adb: New file.
> 	* gdb.ada/voidctx/pck.ads: New file.
> 	* gdb.ada/voidctx/voidctx.adb: New file.
> 	* gdb.ada/voidctx.exp: New file.

Thanks for the patch. It looks good to me.

In looking at the testcase, it inspired me to modify the testcase
we have in house to use counters to keep track of which function
gets called, when it gets called and how many times. What do you think
of doing the same here?

Thanks again!


> ---
>  gdb/ChangeLog                             |  9 +++++++
>  gdb/expression.h                          |  3 ++-
>  gdb/parse.c                               | 15 ++++++++---
>  gdb/printcmd.c                            | 10 ++++---
>  gdb/testsuite/ChangeLog                   |  7 +++++
>  gdb/testsuite/gdb.ada/voidctx.exp         | 33 +++++++++++++++++++++++
>  gdb/testsuite/gdb.ada/voidctx/pck.adb     | 26 ++++++++++++++++++
>  gdb/testsuite/gdb.ada/voidctx/pck.ads     | 19 +++++++++++++
>  gdb/testsuite/gdb.ada/voidctx/voidctx.adb | 31 +++++++++++++++++++++
>  9 files changed, 144 insertions(+), 9 deletions(-)
>  create mode 100644 gdb/testsuite/gdb.ada/voidctx.exp
>  create mode 100644 gdb/testsuite/gdb.ada/voidctx/pck.adb
>  create mode 100644 gdb/testsuite/gdb.ada/voidctx/pck.ads
>  create mode 100644 gdb/testsuite/gdb.ada/voidctx/voidctx.adb
> 
> diff --git a/gdb/expression.h b/gdb/expression.h
> index c07111c316f..2abf2d280d6 100644
> --- a/gdb/expression.h
> +++ b/gdb/expression.h
> @@ -120,7 +120,8 @@ typedef std::unique_ptr<expression> expression_up;
>  
>  class innermost_block_tracker;
>  extern expression_up parse_expression (const char *,
> -				       innermost_block_tracker * = nullptr);
> +				       innermost_block_tracker * = nullptr,
> +				       bool void_context_p = false);
>  
>  extern expression_up parse_expression_with_language (const char *string,
>  						     enum language lang);
> diff --git a/gdb/parse.c b/gdb/parse.c
> index 80a67c6c707..1d98a6d9e0c 100644
> --- a/gdb/parse.c
> +++ b/gdb/parse.c
> @@ -1158,13 +1158,20 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
>    return result;
>  }
>  
> -/* Parse STRING as an expression, and complain if this fails
> -   to use up all of the contents of STRING.  */
> +/* Parse STRING as an expression, and complain if this fails to use up
> +   all of the contents of STRING.  TRACKER, if non-null, will be
> +   updated by the parser.  VOID_CONTEXT_P should be true to indicate
> +   that the expression may be expected to return a value with void
> +   type.  Parsers are free to ignore this, or to use it to help with
> +   overload resolution decisions.  */
>  
>  expression_up
> -parse_expression (const char *string, innermost_block_tracker *tracker)
> +parse_expression (const char *string, innermost_block_tracker *tracker,
> +		  bool void_context_p)
>  {
> -  expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
> +  expression_up exp = parse_exp_in_context (&string, 0, nullptr, 0,
> +					    void_context_p, nullptr,
> +					    tracker, nullptr);
>    if (*string)
>      error (_("Junk after end of expression."));
>    return exp;
> diff --git a/gdb/printcmd.c b/gdb/printcmd.c
> index de083a2a768..2de5f32cc7c 100644
> --- a/gdb/printcmd.c
> +++ b/gdb/printcmd.c
> @@ -1206,7 +1206,7 @@ print_value (value *val, const value_print_options &opts)
>  /* Implementation of the "print" and "call" commands.  */
>  
>  static void
> -print_command_1 (const char *args, int voidprint)
> +print_command_1 (const char *args, bool voidprint)
>  {
>    struct value *val;
>    value_print_options print_opts;
> @@ -1223,7 +1223,9 @@ print_command_1 (const char *args, int voidprint)
>  
>    if (exp != nullptr && *exp)
>      {
> -      expression_up expr = parse_expression (exp);
> +      /* VOIDPRINT is true to indicate that we do want to print a void
> +	 value, so invert it for parse_expression.  */
> +      expression_up expr = parse_expression (exp, nullptr, !voidprint);
>        val = evaluate_expression (expr.get ());
>      }
>    else
> @@ -1321,14 +1323,14 @@ print_command_completer (struct cmd_list_element *ignore,
>  static void
>  print_command (const char *exp, int from_tty)
>  {
> -  print_command_1 (exp, 1);
> +  print_command_1 (exp, true);
>  }
>  
>  /* Same as print, except it doesn't print void results.  */
>  static void
>  call_command (const char *exp, int from_tty)
>  {
> -  print_command_1 (exp, 0);
> +  print_command_1 (exp, false);
>  }
>  
>  /* Implementation of the "output" command.  */
> diff --git a/gdb/testsuite/gdb.ada/voidctx.exp b/gdb/testsuite/gdb.ada/voidctx.exp
> new file mode 100644
> index 00000000000..7e38cad0f7e
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx.exp
> @@ -0,0 +1,33 @@
> +# Copyright 2020 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +load_lib "ada.exp"
> +
> +if { [skip_ada_tests] } { return -1 }
> +
> +standard_ada_testfile voidctx
> +
> +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
> +  return -1
> +}
> +
> +clean_restart ${testfile}
> +
> +set bp_location [gdb_get_line_number "STOP" ${testdir}/voidctx.adb]
> +runto "voidctx.adb:$bp_location"
> +
> +gdb_test "print DoSomething" " = 42"
> +gdb_test_no_output "call DoSomething"
> +
> diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.adb b/gdb/testsuite/gdb.ada/voidctx/pck.adb
> new file mode 100644
> index 00000000000..5b8bdfe6a29
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx/pck.adb
> @@ -0,0 +1,26 @@
> +--  Copyright 2020 Free Software Foundation, Inc.
> +--
> +--  This program is free software; you can redistribute it and/or modify
> +--  it under the terms of the GNU General Public License as published by
> +--  the Free Software Foundation; either version 3 of the License, or
> +--  (at your option) any later version.
> +--
> +--  This program is distributed in the hope that it will be useful,
> +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +--  GNU General Public License for more details.
> +--
> +--  You should have received a copy of the GNU General Public License
> +--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +package body Pck is
> +   function DoSomething return Integer is
> +   begin
> +      return 42;
> +   end;
> +
> +   procedure DoSomething is
> +   begin
> +      null;
> +   end;
> +end Pck;
> diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.ads b/gdb/testsuite/gdb.ada/voidctx/pck.ads
> new file mode 100644
> index 00000000000..71d891a9bea
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx/pck.ads
> @@ -0,0 +1,19 @@
> +--  Copyright 2020 Free Software Foundation, Inc.
> +--
> +--  This program is free software; you can redistribute it and/or modify
> +--  it under the terms of the GNU General Public License as published by
> +--  the Free Software Foundation; either version 3 of the License, or
> +--  (at your option) any later version.
> +--
> +--  This program is distributed in the hope that it will be useful,
> +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +--  GNU General Public License for more details.
> +--
> +--  You should have received a copy of the GNU General Public License
> +--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +package Pck is
> +   function DoSomething return Integer;
> +   procedure DoSomething;
> +end Pck;
> diff --git a/gdb/testsuite/gdb.ada/voidctx/voidctx.adb b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
> new file mode 100644
> index 00000000000..fcf7af73f05
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
> @@ -0,0 +1,31 @@
> +--  Copyright 2020 Free Software Foundation, Inc.
> +--
> +--  This program is free software; you can redistribute it and/or modify
> +--  it under the terms of the GNU General Public License as published by
> +--  the Free Software Foundation; either version 3 of the License, or
> +--  (at your option) any later version.
> +--
> +--  This program is distributed in the hope that it will be useful,
> +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +--  GNU General Public License for more details.
> +--
> +--  You should have received a copy of the GNU General Public License
> +--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +with Pck; use Pck;
> +procedure Voidctx is	      
> +
> +   function DoSomething return Integer is
> +   begin
> +      return 42;
> +   end;
> +
> +   procedure DoSomething is
> +   begin
> +      null;
> +   end;
> +
> +begin
> +   null;  -- STOP
> +end Voidctx;
> -- 
> 2.26.2

-- 
Joel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Pass void_context_p to parse_expression
  2020-12-27  6:20 ` Joel Brobecker
@ 2021-01-07 13:55   ` Tom Tromey
  2021-01-08  6:54     ` Joel Brobecker
  0 siblings, 1 reply; 4+ messages in thread
From: Tom Tromey @ 2021-01-07 13:55 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: Tom Tromey, gdb-patches

Joel> In looking at the testcase, it inspired me to modify the testcase
Joel> we have in house to use counters to keep track of which function
Joel> gets called, when it gets called and how many times. What do you think
Joel> of doing the same here?

Sure, how about the appended?

Tom

commit c8438c9f872a65811d99589ee7095c12e75d2144
Author: Tom Tromey <tromey@adacore.com>
Date:   Fri Dec 18 08:02:08 2020 -0700

    Pass void_context_p to parse_expression
    
    An earlier patch pointed out that nothing in GDB sets void_context_p
    when parsing an expression.  This patch fixes this omission.
    
    "print" and "call" differ in that the former will print a value that
    has void type, while the latter will not.  AdaCore has had a patch for
    a long time that uses this distinction to help with overload
    resolution.  In particular, in a "call" context, a procedure will be
    chosen, while in a "print" context, a zero-argument function will be
    chosen instead.
    
    Regression tested on x86-64 Fedora 32.
    
    gdb/ChangeLog
    2020-12-18  Tom Tromey  <tromey@adacore.com>
    
            * parse.c (parse_expression): Add void_context_p parameter.  Use
            parse_exp_in_context.
            * printcmd.c (print_command_1): Change voidprint to bool.  Pass to
            parse_expression.
            (print_command, call_command): Update.
            * expression.h (parse_expression): Add void_context_p parameter.
    
    gdb/testsuite/ChangeLog
    2020-12-18  Tom Tromey  <tromey@adacore.com>
    
            * gdb.ada/voidctx/pck.adb: New file.
            * gdb.ada/voidctx/pck.ads: New file.
            * gdb.ada/voidctx/voidctx.adb: New file.
            * gdb.ada/voidctx.exp: New file.

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 44dfabf62d4..739b129f1e9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2020-12-18  Tom Tromey  <tromey@adacore.com>
+
+	* parse.c (parse_expression): Add void_context_p parameter.  Use
+	parse_exp_in_context.
+	* printcmd.c (print_command_1): Change voidprint to bool.  Pass to
+	parse_expression.
+	(print_command, call_command): Update.
+	* expression.h (parse_expression): Add void_context_p parameter.
+
 2021-01-06  Tom Tromey  <tromey@adacore.com>
 
 	* ada-lang.c (ada_evaluate_subexp) <BINOP_ADD, BINOP_SUB>:
diff --git a/gdb/expression.h b/gdb/expression.h
index 8c0bcc90f15..e70169e9b3e 100644
--- a/gdb/expression.h
+++ b/gdb/expression.h
@@ -142,7 +142,8 @@ typedef std::unique_ptr<expression> expression_up;
 
 class innermost_block_tracker;
 extern expression_up parse_expression (const char *,
-				       innermost_block_tracker * = nullptr);
+				       innermost_block_tracker * = nullptr,
+				       bool void_context_p = false);
 
 extern expression_up parse_expression_with_language (const char *string,
 						     enum language lang);
diff --git a/gdb/parse.c b/gdb/parse.c
index 51e7d65ad07..b3cd91d2730 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -1158,13 +1158,20 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
   return result;
 }
 
-/* Parse STRING as an expression, and complain if this fails
-   to use up all of the contents of STRING.  */
+/* Parse STRING as an expression, and complain if this fails to use up
+   all of the contents of STRING.  TRACKER, if non-null, will be
+   updated by the parser.  VOID_CONTEXT_P should be true to indicate
+   that the expression may be expected to return a value with void
+   type.  Parsers are free to ignore this, or to use it to help with
+   overload resolution decisions.  */
 
 expression_up
-parse_expression (const char *string, innermost_block_tracker *tracker)
+parse_expression (const char *string, innermost_block_tracker *tracker,
+		  bool void_context_p)
 {
-  expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
+  expression_up exp = parse_exp_in_context (&string, 0, nullptr, 0,
+					    void_context_p, nullptr,
+					    tracker, nullptr);
   if (*string)
     error (_("Junk after end of expression."));
   return exp;
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index a1c9af1acae..2e56d28e9f4 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -1206,7 +1206,7 @@ print_value (value *val, const value_print_options &opts)
 /* Implementation of the "print" and "call" commands.  */
 
 static void
-print_command_1 (const char *args, int voidprint)
+print_command_1 (const char *args, bool voidprint)
 {
   struct value *val;
   value_print_options print_opts;
@@ -1223,7 +1223,9 @@ print_command_1 (const char *args, int voidprint)
 
   if (exp != nullptr && *exp)
     {
-      expression_up expr = parse_expression (exp);
+      /* VOIDPRINT is true to indicate that we do want to print a void
+	 value, so invert it for parse_expression.  */
+      expression_up expr = parse_expression (exp, nullptr, !voidprint);
       val = evaluate_expression (expr.get ());
     }
   else
@@ -1321,14 +1323,14 @@ print_command_completer (struct cmd_list_element *ignore,
 static void
 print_command (const char *exp, int from_tty)
 {
-  print_command_1 (exp, 1);
+  print_command_1 (exp, true);
 }
 
 /* Same as print, except it doesn't print void results.  */
 static void
 call_command (const char *exp, int from_tty)
 {
-  print_command_1 (exp, 0);
+  print_command_1 (exp, false);
 }
 
 /* Implementation of the "output" command.  */
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 8d5a2ee4599..e696632f296 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2020-12-18  Tom Tromey  <tromey@adacore.com>
+
+	* gdb.ada/voidctx/pck.adb: New file.
+	* gdb.ada/voidctx/pck.ads: New file.
+	* gdb.ada/voidctx/voidctx.adb: New file.
+	* gdb.ada/voidctx.exp: New file.
+
 2021-01-06  Tom Tromey  <tromey@adacore.com>
 
 	* gdb.ada/fixed_points/pck.ads (Delta4): New constant.
diff --git a/gdb/testsuite/gdb.ada/voidctx.exp b/gdb/testsuite/gdb.ada/voidctx.exp
new file mode 100644
index 00000000000..c557c1fe8d0
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx.exp
@@ -0,0 +1,40 @@
+# Copyright 2021 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile voidctx
+
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+  return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/voidctx.adb]
+runto "voidctx.adb:$bp_location"
+
+gdb_test "print pck.proc_count" " = 0" "initial proc_count"
+gdb_test "print pck.func_count" " = 0" "initial func_count"
+
+gdb_test "print DoSomething" " = 42"
+gdb_test "print pck.proc_count" " = 0" "check proc_count 1"
+gdb_test "print pck.func_count" " = 1" "check func_count 1"
+
+gdb_test_no_output "call DoSomething"
+gdb_test "print pck.proc_count" " = 1" "check proc_count 2"
+gdb_test "print pck.func_count" " = 1" "check func_count 2"
diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.adb b/gdb/testsuite/gdb.ada/voidctx/pck.adb
new file mode 100644
index 00000000000..bdd76cd4142
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx/pck.adb
@@ -0,0 +1,27 @@
+--  Copyright 2021 Free Software Foundation, Inc.
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   function DoSomething return Integer is
+   begin
+      Func_Count := Func_Count + 1;
+      return 42;
+   end;
+
+   procedure DoSomething is
+   begin
+      Proc_Count := Proc_Count + 1;
+   end;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.ads b/gdb/testsuite/gdb.ada/voidctx/pck.ads
new file mode 100644
index 00000000000..cf7fe15e6fb
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx/pck.ads
@@ -0,0 +1,23 @@
+--  Copyright 2021 Free Software Foundation, Inc.
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+   -- Each count is incremented by the respective DoSomething.
+   Proc_Count : Integer := 0;
+   Func_Count : Integer := 0;
+
+   function DoSomething return Integer;
+   procedure DoSomething;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/voidctx/voidctx.adb b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
new file mode 100644
index 00000000000..8059a2be81b
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
@@ -0,0 +1,31 @@
+--  Copyright 2021 Free Software Foundation, Inc.
+--
+--  This program is free software; you can redistribute it and/or modify
+--  it under the terms of the GNU General Public License as published by
+--  the Free Software Foundation; either version 3 of the License, or
+--  (at your option) any later version.
+--
+--  This program is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+--  GNU General Public License for more details.
+--
+--  You should have received a copy of the GNU General Public License
+--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+procedure Voidctx is	      
+
+   function DoSomething return Integer is
+   begin
+      return 42;
+   end;
+
+   procedure DoSomething is
+   begin
+      null;
+   end;
+
+begin
+   null;  -- STOP
+end Voidctx;

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Pass void_context_p to parse_expression
  2021-01-07 13:55   ` Tom Tromey
@ 2021-01-08  6:54     ` Joel Brobecker
  0 siblings, 0 replies; 4+ messages in thread
From: Joel Brobecker @ 2021-01-08  6:54 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

Hi Tom,

On Thu, Jan 07, 2021 at 06:55:27AM -0700, Tom Tromey wrote:
> Joel> In looking at the testcase, it inspired me to modify the testcase
> Joel> we have in house to use counters to keep track of which function
> Joel> gets called, when it gets called and how many times. What do you think
> Joel> of doing the same here?
> 
> Sure, how about the appended?

Thanks, looks good!

> commit c8438c9f872a65811d99589ee7095c12e75d2144
> Author: Tom Tromey <tromey@adacore.com>
> Date:   Fri Dec 18 08:02:08 2020 -0700
> 
>     Pass void_context_p to parse_expression
>     
>     An earlier patch pointed out that nothing in GDB sets void_context_p
>     when parsing an expression.  This patch fixes this omission.
>     
>     "print" and "call" differ in that the former will print a value that
>     has void type, while the latter will not.  AdaCore has had a patch for
>     a long time that uses this distinction to help with overload
>     resolution.  In particular, in a "call" context, a procedure will be
>     chosen, while in a "print" context, a zero-argument function will be
>     chosen instead.
>     
>     Regression tested on x86-64 Fedora 32.
>     
>     gdb/ChangeLog
>     2020-12-18  Tom Tromey  <tromey@adacore.com>
>     
>             * parse.c (parse_expression): Add void_context_p parameter.  Use
>             parse_exp_in_context.
>             * printcmd.c (print_command_1): Change voidprint to bool.  Pass to
>             parse_expression.
>             (print_command, call_command): Update.
>             * expression.h (parse_expression): Add void_context_p parameter.
>     
>     gdb/testsuite/ChangeLog
>     2020-12-18  Tom Tromey  <tromey@adacore.com>
>     
>             * gdb.ada/voidctx/pck.adb: New file.
>             * gdb.ada/voidctx/pck.ads: New file.
>             * gdb.ada/voidctx/voidctx.adb: New file.
>             * gdb.ada/voidctx.exp: New file.
> 
> diff --git a/gdb/ChangeLog b/gdb/ChangeLog
> index 44dfabf62d4..739b129f1e9 100644
> --- a/gdb/ChangeLog
> +++ b/gdb/ChangeLog
> @@ -1,3 +1,12 @@
> +2020-12-18  Tom Tromey  <tromey@adacore.com>
> +
> +	* parse.c (parse_expression): Add void_context_p parameter.  Use
> +	parse_exp_in_context.
> +	* printcmd.c (print_command_1): Change voidprint to bool.  Pass to
> +	parse_expression.
> +	(print_command, call_command): Update.
> +	* expression.h (parse_expression): Add void_context_p parameter.
> +
>  2021-01-06  Tom Tromey  <tromey@adacore.com>
>  
>  	* ada-lang.c (ada_evaluate_subexp) <BINOP_ADD, BINOP_SUB>:
> diff --git a/gdb/expression.h b/gdb/expression.h
> index 8c0bcc90f15..e70169e9b3e 100644
> --- a/gdb/expression.h
> +++ b/gdb/expression.h
> @@ -142,7 +142,8 @@ typedef std::unique_ptr<expression> expression_up;
>  
>  class innermost_block_tracker;
>  extern expression_up parse_expression (const char *,
> -				       innermost_block_tracker * = nullptr);
> +				       innermost_block_tracker * = nullptr,
> +				       bool void_context_p = false);
>  
>  extern expression_up parse_expression_with_language (const char *string,
>  						     enum language lang);
> diff --git a/gdb/parse.c b/gdb/parse.c
> index 51e7d65ad07..b3cd91d2730 100644
> --- a/gdb/parse.c
> +++ b/gdb/parse.c
> @@ -1158,13 +1158,20 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
>    return result;
>  }
>  
> -/* Parse STRING as an expression, and complain if this fails
> -   to use up all of the contents of STRING.  */
> +/* Parse STRING as an expression, and complain if this fails to use up
> +   all of the contents of STRING.  TRACKER, if non-null, will be
> +   updated by the parser.  VOID_CONTEXT_P should be true to indicate
> +   that the expression may be expected to return a value with void
> +   type.  Parsers are free to ignore this, or to use it to help with
> +   overload resolution decisions.  */
>  
>  expression_up
> -parse_expression (const char *string, innermost_block_tracker *tracker)
> +parse_expression (const char *string, innermost_block_tracker *tracker,
> +		  bool void_context_p)
>  {
> -  expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
> +  expression_up exp = parse_exp_in_context (&string, 0, nullptr, 0,
> +					    void_context_p, nullptr,
> +					    tracker, nullptr);
>    if (*string)
>      error (_("Junk after end of expression."));
>    return exp;
> diff --git a/gdb/printcmd.c b/gdb/printcmd.c
> index a1c9af1acae..2e56d28e9f4 100644
> --- a/gdb/printcmd.c
> +++ b/gdb/printcmd.c
> @@ -1206,7 +1206,7 @@ print_value (value *val, const value_print_options &opts)
>  /* Implementation of the "print" and "call" commands.  */
>  
>  static void
> -print_command_1 (const char *args, int voidprint)
> +print_command_1 (const char *args, bool voidprint)
>  {
>    struct value *val;
>    value_print_options print_opts;
> @@ -1223,7 +1223,9 @@ print_command_1 (const char *args, int voidprint)
>  
>    if (exp != nullptr && *exp)
>      {
> -      expression_up expr = parse_expression (exp);
> +      /* VOIDPRINT is true to indicate that we do want to print a void
> +	 value, so invert it for parse_expression.  */
> +      expression_up expr = parse_expression (exp, nullptr, !voidprint);
>        val = evaluate_expression (expr.get ());
>      }
>    else
> @@ -1321,14 +1323,14 @@ print_command_completer (struct cmd_list_element *ignore,
>  static void
>  print_command (const char *exp, int from_tty)
>  {
> -  print_command_1 (exp, 1);
> +  print_command_1 (exp, true);
>  }
>  
>  /* Same as print, except it doesn't print void results.  */
>  static void
>  call_command (const char *exp, int from_tty)
>  {
> -  print_command_1 (exp, 0);
> +  print_command_1 (exp, false);
>  }
>  
>  /* Implementation of the "output" command.  */
> diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
> index 8d5a2ee4599..e696632f296 100644
> --- a/gdb/testsuite/ChangeLog
> +++ b/gdb/testsuite/ChangeLog
> @@ -1,3 +1,10 @@
> +2020-12-18  Tom Tromey  <tromey@adacore.com>
> +
> +	* gdb.ada/voidctx/pck.adb: New file.
> +	* gdb.ada/voidctx/pck.ads: New file.
> +	* gdb.ada/voidctx/voidctx.adb: New file.
> +	* gdb.ada/voidctx.exp: New file.
> +
>  2021-01-06  Tom Tromey  <tromey@adacore.com>
>  
>  	* gdb.ada/fixed_points/pck.ads (Delta4): New constant.
> diff --git a/gdb/testsuite/gdb.ada/voidctx.exp b/gdb/testsuite/gdb.ada/voidctx.exp
> new file mode 100644
> index 00000000000..c557c1fe8d0
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx.exp
> @@ -0,0 +1,40 @@
> +# Copyright 2021 Free Software Foundation, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +load_lib "ada.exp"
> +
> +if { [skip_ada_tests] } { return -1 }
> +
> +standard_ada_testfile voidctx
> +
> +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
> +  return -1
> +}
> +
> +clean_restart ${testfile}
> +
> +set bp_location [gdb_get_line_number "STOP" ${testdir}/voidctx.adb]
> +runto "voidctx.adb:$bp_location"
> +
> +gdb_test "print pck.proc_count" " = 0" "initial proc_count"
> +gdb_test "print pck.func_count" " = 0" "initial func_count"
> +
> +gdb_test "print DoSomething" " = 42"
> +gdb_test "print pck.proc_count" " = 0" "check proc_count 1"
> +gdb_test "print pck.func_count" " = 1" "check func_count 1"
> +
> +gdb_test_no_output "call DoSomething"
> +gdb_test "print pck.proc_count" " = 1" "check proc_count 2"
> +gdb_test "print pck.func_count" " = 1" "check func_count 2"
> diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.adb b/gdb/testsuite/gdb.ada/voidctx/pck.adb
> new file mode 100644
> index 00000000000..bdd76cd4142
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx/pck.adb
> @@ -0,0 +1,27 @@
> +--  Copyright 2021 Free Software Foundation, Inc.
> +--
> +--  This program is free software; you can redistribute it and/or modify
> +--  it under the terms of the GNU General Public License as published by
> +--  the Free Software Foundation; either version 3 of the License, or
> +--  (at your option) any later version.
> +--
> +--  This program is distributed in the hope that it will be useful,
> +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +--  GNU General Public License for more details.
> +--
> +--  You should have received a copy of the GNU General Public License
> +--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +package body Pck is
> +   function DoSomething return Integer is
> +   begin
> +      Func_Count := Func_Count + 1;
> +      return 42;
> +   end;
> +
> +   procedure DoSomething is
> +   begin
> +      Proc_Count := Proc_Count + 1;
> +   end;
> +end Pck;
> diff --git a/gdb/testsuite/gdb.ada/voidctx/pck.ads b/gdb/testsuite/gdb.ada/voidctx/pck.ads
> new file mode 100644
> index 00000000000..cf7fe15e6fb
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx/pck.ads
> @@ -0,0 +1,23 @@
> +--  Copyright 2021 Free Software Foundation, Inc.
> +--
> +--  This program is free software; you can redistribute it and/or modify
> +--  it under the terms of the GNU General Public License as published by
> +--  the Free Software Foundation; either version 3 of the License, or
> +--  (at your option) any later version.
> +--
> +--  This program is distributed in the hope that it will be useful,
> +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +--  GNU General Public License for more details.
> +--
> +--  You should have received a copy of the GNU General Public License
> +--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +package Pck is
> +   -- Each count is incremented by the respective DoSomething.
> +   Proc_Count : Integer := 0;
> +   Func_Count : Integer := 0;
> +
> +   function DoSomething return Integer;
> +   procedure DoSomething;
> +end Pck;
> diff --git a/gdb/testsuite/gdb.ada/voidctx/voidctx.adb b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
> new file mode 100644
> index 00000000000..8059a2be81b
> --- /dev/null
> +++ b/gdb/testsuite/gdb.ada/voidctx/voidctx.adb
> @@ -0,0 +1,31 @@
> +--  Copyright 2021 Free Software Foundation, Inc.
> +--
> +--  This program is free software; you can redistribute it and/or modify
> +--  it under the terms of the GNU General Public License as published by
> +--  the Free Software Foundation; either version 3 of the License, or
> +--  (at your option) any later version.
> +--
> +--  This program is distributed in the hope that it will be useful,
> +--  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +--  GNU General Public License for more details.
> +--
> +--  You should have received a copy of the GNU General Public License
> +--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +with Pck; use Pck;
> +procedure Voidctx is	      
> +
> +   function DoSomething return Integer is
> +   begin
> +      return 42;
> +   end;
> +
> +   procedure DoSomething is
> +   begin
> +      null;
> +   end;
> +
> +begin
> +   null;  -- STOP
> +end Voidctx;

-- 
Joel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-01-08  6:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-18 15:12 [PATCH] Pass void_context_p to parse_expression Tom Tromey
2020-12-27  6:20 ` Joel Brobecker
2021-01-07 13:55   ` Tom Tromey
2021-01-08  6:54     ` Joel Brobecker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).