Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Aktemur, Tankut Baris" <tankut.baris.aktemur@intel.com>
To: Keith Seitz <keiths@redhat.com>,
	"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: RE: [PATCH v4] infcall: Add support for integer literals as reference function paramters
Date: Wed, 28 Jan 2026 08:24:22 +0000	[thread overview]
Message-ID: <DM4PR11MB730373EAADAED5E5D95F0006C491A@DM4PR11MB7303.namprd11.prod.outlook.com> (raw)
In-Reply-To: <963c933a79455dc4aaa35f8c34bed8693065e6a5.1769539110.git.keiths@redhat.com>

Hello Keith,

The commit title has a typo: "paramters".

On Tuesday, January 27, 2026 8:02 PM, Keith Seitz wrote:
> This patch attempts to mitigate the shortcomings of passing literals
> to inferior function calls requiring references.  The specific use case
> here
> is std::map's operator[]:
> 
> std::map int_map<int, int>;
> int_map[1] = 10;
> (gdb) print int_map[1]
> Attempt to take address of value not located in memory.
> 
> This is occurring because while value_coerce_to_target understands
> that some values need to be allocated and copied to the inferior's
> memory, it only considers the actual parsed type of the argument value,
> ignoring the actual type of the function parameter. That is,
> in this specific case, the value's parsed type is TYPE_CODE_INT, but
> the function requires TYPE_CODE_REF. We need to account for the
> reference.
> 
> In value_arg_coerce, we have special handling for references, but it
> has not specifically dealt with this case. It now checks if the
> reference is in memory, and if it isn't, it copies it, if the type
> is trivially copyable.
> 
> As a result of this patch, the last remaining failure in c++/15372 is
> now
> fixed, and that bug can be closed.
> 
> With this patch, we can now print map entries with integer keys:
> 
> (gdb) print int_map[1]
> $1 = (std::map<int, int, std::less<int>, std::allocator<std::pair<int
> const, int> > >::mapped_type &) @0x41f2d4: 10
> 
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=15372
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=25957
> 
> Changes in v4
> - Allocate to stack instead of heap
> - Use value::force_lval to simply copying to inferior memory
> - Add some addition tests
> 
> Changes in v3
> - Move logic to value_arg_coerce
> - Add some attempt to limit copying to trivially copyable types
> ---
>  gdb/infcall.c                                |  26 +++-
>  gdb/testsuite/gdb.cp/ref-params.cc           |  95 +++++++++++-
>  gdb/testsuite/gdb.cp/ref-params.exp          | 146 +++++++++++++++++++
>  gdb/testsuite/gdb.cp/rvalue-ref-overload.exp |   1 -
>  4 files changed, 261 insertions(+), 7 deletions(-)
> 
> diff --git a/gdb/infcall.c b/gdb/infcall.c
> index dcbae679d07..c4e9605a665 100644
> --- a/gdb/infcall.c
> +++ b/gdb/infcall.c
> @@ -63,6 +63,8 @@ static bool debug_infcall = false;
>  #define INFCALL_SCOPED_DEBUG_START_END(fmt, ...) \
>    scoped_debug_start_end (debug_infrun, "infcall", fmt, ##__VA_ARGS__)
> 
> +static CORE_ADDR reserve_stack_space (const type *values_type,
> CORE_ADDR &sp);
> +
>  /* Implement 'show debug infcall'.  */
> 
>  static void
> @@ -246,7 +248,8 @@ show_unwind_on_timeout_p (struct ui_file *file, int
> from_tty,
> 
>  static struct value *
>  value_arg_coerce (struct gdbarch *gdbarch, struct value *arg,
> -		  struct type *param_type, int is_prototyped)
> +		  struct type *param_type, int is_prototyped,
> +		  CORE_ADDR *sp, struct thread_info *call_thread)

"struct" keywords can be removed.

>  {
>    const struct builtin_type *builtin = builtin_type (gdbarch);
>    struct type *arg_type = check_typedef (arg->type ());
> @@ -276,10 +279,23 @@ value_arg_coerce (struct gdbarch *gdbarch, struct
> value *arg,
>  	  return value_cast_pointers (type, arg, 0);
> 
>  	/* Cast the value to the reference's target type, and then
> -	   convert it back to a reference.  This will issue an error
> -	   if the value was not previously in memory - in some cases
> -	   we should clearly be allowing this, but how?  */
> +	   convert it back to a reference.  If the value is not already
> +	   in memory (e.g., a literal), we need to allocate space in the
> +	   inferior and copy it there.  */
>  	new_value = value_cast (type->target_type (), arg);
> +	if (new_value->lval () != lval_memory
> +	    && language_pass_by_reference (new_value->type ())
> +	    .trivially_copyable)
> +	  {
> +	    CORE_ADDR addr;

This declaration can be moved to its definition below.

I also ran the testsuite with the default board file and 
did not see any regression.

Reviewed-By: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
 
Regards,
-Baris


Intel Deutschland GmbH
Registered Address: Dornacher Straße 1, 85622 Feldkirchen, Germany
Tel: +49 89 991 430, www.intel.de
Managing Directors: Harry Demas, Jeffrey Schneiderman, Yin Chong Sorrell
Chairperson of the Supervisory Board: Nicole Lau
Registered Seat: Munich
Commercial Register: Amtsgericht München HRB 186928

  reply	other threads:[~2026-01-28  8:25 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-16 15:48 [PATCH] " Keith Seitz
2025-10-17 14:49 ` Tom Tromey
2025-10-20 19:00   ` Keith Seitz
2025-10-20 19:36 ` [PATCH v2] " Keith Seitz
2025-10-21 20:19   ` Tom Tromey
2025-10-22 12:05     ` Andrew Burgess
2025-10-22 13:21       ` Tom Tromey
2026-01-22 19:05       ` Keith Seitz
2026-01-23 14:07         ` Aktemur, Tankut Baris
2026-01-27 18:43           ` Keith Seitz
2026-01-27 19:01 ` [PATCH v4] " Keith Seitz
2026-01-28  8:24   ` Aktemur, Tankut Baris [this message]
2026-01-28 13:54   ` Andrew Burgess
2026-02-02 17:05     ` Aktemur, Tankut Baris
2026-02-02 17:21     ` Keith Seitz
2026-01-30 20:59   ` Tom Tromey
2026-02-02 16:58     ` Keith Seitz
2026-02-02 17:22       ` Aktemur, Tankut Baris
2026-02-12 16:31       ` Tom Tromey
2026-03-12 14:14 ` [PATCH v5] infcall: Add support for integer literals as reference function parameters Keith Seitz
2026-03-12 16:23   ` Tom de Vries
2026-03-12 16:45     ` Keith Seitz
2026-03-12 17:12 ` [PATCH v6] " Keith Seitz
2026-03-17 14:10   ` Andrew Burgess
2026-03-17 18:11     ` Keith Seitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DM4PR11MB730373EAADAED5E5D95F0006C491A@DM4PR11MB7303.namprd11.prod.outlook.com \
    --to=tankut.baris.aktemur@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=keiths@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox