public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: "Potharla\, Rupesh" <Rupesh.Potharla@amd.com>,
	Tom Tromey <tom@tromey.com>, "Potharla\,
	Rupesh via Gdb-patches" <gdb-patches@sourceware.org>
Cc: "George\, Jini Susan" <JiniSusan.George@amd.com>, "Parasuraman\,
	Hariharan" <Hariharan.Parasuraman@amd.com>, "Sharma\,
	Alok Kumar" <AlokKumar.Sharma@amd.com>
Subject: RE: GDB/Fortran: Support for Assumed Rank Zero.
Date: Mon, 25 Apr 2022 09:47:22 +0100	[thread overview]
Message-ID: <871qxlr1lx.fsf@redhat.com> (raw)
In-Reply-To: <DM6PR12MB421919BD97FFA68445838BABE7F89@DM6PR12MB4219.namprd12.prod.outlook.com>

"Potharla, Rupesh" <Rupesh.Potharla@amd.com> writes:

> [AMD Official Use Only - General]
>
> Thanks Andrew,
>
>>> -static struct dynamic_prop_list *
>>> +struct dynamic_prop_list *
>>>  copy_dynamic_prop_list (struct obstack *objfile_obstack,
>>>                       struct dynamic_prop_list *list)  {
>>
>>Please leave this as 'static', and just add a forward declaration within the
>>gdbtypes.c.
>>
>>With that change, this is OK to commit.
>
> Made the code changes suggested and attached the patch which I am
> planning to commit.

LGTM.

Thanks,
Andrew

>
>
> Regards,
> Rupesh P
>
>
>
>>-----Original Message-----
>>From: Andrew Burgess <aburgess@redhat.com>
>>Sent: Friday, April 22, 2022 8:09 PM
>>To: Potharla, Rupesh <Rupesh.Potharla@amd.com>; Tom Tromey
>><tom@tromey.com>; Potharla, Rupesh via Gdb-patches <gdb-
>>patches@sourceware.org>
>>Cc: George, Jini Susan <JiniSusan.George@amd.com>; Parasuraman,
>>Hariharan <Hariharan.Parasuraman@amd.com>; Sharma, Alok Kumar
>><AlokKumar.Sharma@amd.com>
>>Subject: RE: GDB/Fortran: Support for Assumed Rank Zero.
>>
>>[CAUTION: External Email]
>>
>>"Potharla, Rupesh via Gdb-patches" <gdb-patches@sourceware.org> writes:
>>
>>> [AMD Official Use Only]
>>>
>>> Thanks, Andrew,
>>>
>>> Made suggested code changes and attached the updated patch. Requesting
>>> to review the code changes.
>>
>>Thanks, this all looks fine to me, except for one small issue...
>>
>>> From fbfa2f4c26eeef7547603aafafb9525d66d1b172 Mon Sep 17 00:00:00
>>2001
>>> From: rupothar <rupesh.potharla@amd.com>
>>> Date: Fri, 8 Apr 2022 16:05:41 +0530
>>> Subject: [PATCH] gdb/fortran: Support for assumed rank zero
>>>
>>> If a variable is passed to function in FORTRAN as an argument the
>>> variable is treated as an array with rank zero.  GDB currently does
>>> not support the case for assumed rank 0.  This patch provides support
>>> for assumed rank 0 and updates the testcase as well.
>>>
>>> Without patch:
>>> Breakpoint 1, arank::sub1 (a=<error reading variable:
>>>   failed to resolve dynamic array rank>) at assumedrank.f90:11
>>> 11       PRINT *, RANK(a)
>>> (gdb) p a
>>> failed to resolve dynamic array rank
>>> (gdb) p rank(a)
>>> failed to resolve dynamic array rank
>>>
>>> With patch:
>>> Breakpoint 1, arank::sub1 (a=0) at assumedrank.f90:11
>>> 11       PRINT *, RANK(a)
>>> (gdb) p a
>>> $1 = 0
>>> (gdb) p rank(a)
>>> $2 = 0
>>> ---
>>>  gdb/gdbtypes.c                            | 21 ++++++++++++++++-----
>>>  gdb/gdbtypes.h                            |  4 +++-
>>>  gdb/testsuite/gdb.fortran/assumedrank.exp |  6 ++++++
>>>  gdb/testsuite/gdb.fortran/assumedrank.f90 |  3 +++
>>>  4 files changed, 28 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index
>>> 49ecb199b07..47cf442a2d5 100644
>>> --- a/gdb/gdbtypes.c
>>> +++ b/gdb/gdbtypes.c
>>> @@ -2398,10 +2398,21 @@ resolve_dynamic_array_or_string (struct type
>>> *type,
>>>
>>>        if (rank == 0)
>>>       {
>>> -       /* The dynamic property list juggling below was from the original
>>> -          patch.  I don't understand what this is all about, so I've
>>> -          commented it out for now and added the following error.  */
>>> -       error (_("failed to resolve dynamic array rank"));
>>> +       /* Rank is zero, if a variable is passed as an argument to a
>>> +          function.  In this case the resolved type should not be an
>>> +          array, but should instead be that of an array element.  */
>>> +       struct type *dynamic_array_type = type;
>>> +       type = copy_type (TYPE_TARGET_TYPE (dynamic_array_type));
>>> +       struct dynamic_prop_list *prop_list
>>> +         = TYPE_MAIN_TYPE (dynamic_array_type)->dyn_prop_list;
>>> +       if (prop_list != nullptr)
>>> +         {
>>> +           struct obstack *obstack
>>> +             = &type->objfile_owner ()->objfile_obstack;
>>> +           TYPE_MAIN_TYPE (type)->dyn_prop_list
>>> +             = copy_dynamic_prop_list (obstack, prop_list);
>>> +         }
>>> +       return type;
>>>       }
>>>        else if (type->code () == TYPE_CODE_STRING && rank != 1)
>>>       {
>>> @@ -5589,7 +5600,7 @@ create_copied_types_hash (struct objfile
>>> *objfile)
>>>
>>>  /* Recursively copy (deep copy) a dynamic attribute list of a type.
>>> */
>>>
>>> -static struct dynamic_prop_list *
>>> +struct dynamic_prop_list *
>>>  copy_dynamic_prop_list (struct obstack *objfile_obstack,
>>>                       struct dynamic_prop_list *list)  {
>>
>>Please leave this as 'static', and just add a forward declaration within the
>>gdbtypes.c.
>>
>>With that change, this is OK to commit.
>>
>>Thanks,
>>Andrew
>>
>>> diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index
>>> 769328cc9cd..99273d14c1f 100644
>>> --- a/gdb/gdbtypes.h
>>> +++ b/gdb/gdbtypes.h
>>> @@ -2092,7 +2092,6 @@ extern void allocate_gnat_aux_type (struct type
>>> *);  #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type
>>> #define TYPE_RVALUE_REFERENCE_TYPE(thistype)
>>> (thistype)->rvalue_reference_type  #define TYPE_CHAIN(thistype)
>>> (thistype)->chain -#define TYPE_DYN_PROP(thistype)
>>> TYPE_MAIN_TYPE(thistype)->dyn_prop_list
>>>  /* * Note that if thistype is a TYPEDEF type, you have to call check_typedef.
>>>     But check_typedef does set the TYPE_LENGTH of the TYPEDEF type,
>>>     so you only have to call check_typedef once.  Since allocate_value
>>> @@ -2882,6 +2881,9 @@ extern struct type *copy_type_recursive (struct
>>objfile *objfile,
>>>                                        struct type *type,
>>>                                        htab_t copied_types);
>>>
>>> +extern struct dynamic_prop_list * copy_dynamic_prop_list
>>> +  (struct obstack *objfile_obstack, struct dynamic_prop_list *list);
>>> +
>>>  extern struct type *copy_type (const struct type *type);
>>>
>>>  extern bool types_equal (struct type *, struct type *); diff --git
>>> a/gdb/testsuite/gdb.fortran/assumedrank.exp
>>> b/gdb/testsuite/gdb.fortran/assumedrank.exp
>>> index 69cd168125f..e9429b44a9a 100644
>>> --- a/gdb/testsuite/gdb.fortran/assumedrank.exp
>>> +++ b/gdb/testsuite/gdb.fortran/assumedrank.exp
>>> @@ -58,6 +58,12 @@ while { $test_count < 500 } {
>>>           }
>>>       }
>>>
>>> +     # Currently, flang does not support rank0.
>>> +     if {$test_count == 1 && [test_compiler_info {clang-*}]} {
>>> +        unsupported "compiler does not support rank 0"
>>> +        continue
>>> +     }
>>> +
>>>       if ($found_final_breakpoint) {
>>>           break
>>>       }
>>> diff --git a/gdb/testsuite/gdb.fortran/assumedrank.f90
>>> b/gdb/testsuite/gdb.fortran/assumedrank.f90
>>> index 7f077c3f014..7f7cf2c1f3e 100644
>>> --- a/gdb/testsuite/gdb.fortran/assumedrank.f90
>>> +++ b/gdb/testsuite/gdb.fortran/assumedrank.f90
>>> @@ -19,16 +19,19 @@
>>>
>>>  PROGRAM  arank
>>>
>>> +  REAL :: array0
>>>    REAL :: array1(10)
>>>    REAL :: array2(1, 2)
>>>    REAL :: array3(3, 4, 5)
>>>    REAL :: array4(4, 5, 6, 7)
>>>
>>> +  array0 = 0
>>>    array1 = 1.0
>>>    array2 = 2.0
>>>    array3 = 3.0
>>>    array4 = 4.0
>>>
>>> +  call test_rank (array0)
>>>    call test_rank (array1)
>>>    call test_rank (array2)
>>>    call test_rank (array3)
>>> --
>>> 2.17.1
> From 91988817256be685a4b1ec7db7ef408492be6ff6 Mon Sep 17 00:00:00 2001
> From: rupothar <rupesh.potharla@amd.com>
> Date: Fri, 8 Apr 2022 16:05:41 +0530
> Subject: [PATCH] gdb/fortran: Support for assumed rank zero
>
> If a variable is passed to function in FORTRAN as an argument the
> variable is treated as an array with rank zero.  GDB currently does
> not support the case for assumed rank 0.  This patch provides support
> for assumed rank 0 and updates the testcase as well.
>
> Without patch:
> Breakpoint 1, arank::sub1 (a=<error reading variable:
>   failed to resolve dynamic array rank>) at assumedrank.f90:11
> 11       PRINT *, RANK(a)
> (gdb) p a
> failed to resolve dynamic array rank
> (gdb) p rank(a)
> failed to resolve dynamic array rank
>
> With patch:
> Breakpoint 1, arank::sub1 (a=0) at assumedrank.f90:11
> 11       PRINT *, RANK(a)
> (gdb) p a
> $1 = 0
> (gdb) p rank(a)
> $2 = 0
> ---
>  gdb/gdbtypes.c                            | 22 ++++++++++++++++++----
>  gdb/gdbtypes.h                            |  1 -
>  gdb/testsuite/gdb.fortran/assumedrank.exp |  6 ++++++
>  gdb/testsuite/gdb.fortran/assumedrank.f90 |  3 +++
>  4 files changed, 27 insertions(+), 5 deletions(-)
>
> diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
> index 49ecb199b07..2a51372a037 100644
> --- a/gdb/gdbtypes.c
> +++ b/gdb/gdbtypes.c
> @@ -47,6 +47,9 @@
>  /* The value of an invalid conversion badness.  */
>  #define INVALID_CONVERSION 100
>  
> +static struct dynamic_prop_list *
> +copy_dynamic_prop_list (struct obstack *, struct dynamic_prop_list *);
> +
>  /* Initialize BADNESS constants.  */
>  
>  const struct rank LENGTH_MISMATCH_BADNESS = {INVALID_CONVERSION,0};
> @@ -2398,10 +2401,21 @@ resolve_dynamic_array_or_string (struct type *type,
>  
>        if (rank == 0)
>  	{
> -	  /* The dynamic property list juggling below was from the original
> -	     patch.  I don't understand what this is all about, so I've
> -	     commented it out for now and added the following error.  */
> -	  error (_("failed to resolve dynamic array rank"));
> +	  /* Rank is zero, if a variable is passed as an argument to a
> +	     function.  In this case the resolved type should not be an
> +	     array, but should instead be that of an array element.  */
> +	  struct type *dynamic_array_type = type;
> +	  type = copy_type (TYPE_TARGET_TYPE (dynamic_array_type));
> +	  struct dynamic_prop_list *prop_list
> +	    = TYPE_MAIN_TYPE (dynamic_array_type)->dyn_prop_list;
> +	  if (prop_list != nullptr)
> +	    {
> +	      struct obstack *obstack
> +		= &type->objfile_owner ()->objfile_obstack;
> +	      TYPE_MAIN_TYPE (type)->dyn_prop_list
> +		= copy_dynamic_prop_list (obstack, prop_list);
> +	    }
> +	  return type;
>  	}
>        else if (type->code () == TYPE_CODE_STRING && rank != 1)
>  	{
> diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
> index 769328cc9cd..7437e1db8ab 100644
> --- a/gdb/gdbtypes.h
> +++ b/gdb/gdbtypes.h
> @@ -2092,7 +2092,6 @@ extern void allocate_gnat_aux_type (struct type *);
>  #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type
>  #define TYPE_RVALUE_REFERENCE_TYPE(thistype) (thistype)->rvalue_reference_type
>  #define TYPE_CHAIN(thistype) (thistype)->chain
> -#define TYPE_DYN_PROP(thistype)  TYPE_MAIN_TYPE(thistype)->dyn_prop_list
>  /* * Note that if thistype is a TYPEDEF type, you have to call check_typedef.
>     But check_typedef does set the TYPE_LENGTH of the TYPEDEF type,
>     so you only have to call check_typedef once.  Since allocate_value
> diff --git a/gdb/testsuite/gdb.fortran/assumedrank.exp b/gdb/testsuite/gdb.fortran/assumedrank.exp
> index 69cd168125f..e9429b44a9a 100644
> --- a/gdb/testsuite/gdb.fortran/assumedrank.exp
> +++ b/gdb/testsuite/gdb.fortran/assumedrank.exp
> @@ -58,6 +58,12 @@ while { $test_count < 500 } {
>  	    }
>  	}
>  
> +	# Currently, flang does not support rank0.
> +	if {$test_count == 1 && [test_compiler_info {clang-*}]} {
> +	   unsupported "compiler does not support rank 0"
> +	   continue
> +	}
> +
>  	if ($found_final_breakpoint) {
>  	    break
>  	}
> diff --git a/gdb/testsuite/gdb.fortran/assumedrank.f90 b/gdb/testsuite/gdb.fortran/assumedrank.f90
> index 7f077c3f014..7f7cf2c1f3e 100644
> --- a/gdb/testsuite/gdb.fortran/assumedrank.f90
> +++ b/gdb/testsuite/gdb.fortran/assumedrank.f90
> @@ -19,16 +19,19 @@
>  
>  PROGRAM  arank
>  
> +  REAL :: array0
>    REAL :: array1(10)
>    REAL :: array2(1, 2)
>    REAL :: array3(3, 4, 5)
>    REAL :: array4(4, 5, 6, 7)
>  
> +  array0 = 0
>    array1 = 1.0
>    array2 = 2.0
>    array3 = 3.0
>    array4 = 4.0
>  
> +  call test_rank (array0)
>    call test_rank (array1)
>    call test_rank (array2)
>    call test_rank (array3)
> -- 
> 2.17.1


  reply	other threads:[~2022-04-25  8:47 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-13  9:55 Potharla, Rupesh
2022-04-13 18:27 ` Kevin Buettner
2022-04-14 10:30   ` Potharla, Rupesh
2022-04-14 21:28     ` Kevin Buettner
2022-04-15 13:33       ` Potharla, Rupesh
2022-04-15 19:31         ` Kevin Buettner
2022-04-16 18:29           ` Potharla, Rupesh
2022-04-18 13:31             ` Tom Tromey
2022-04-18 15:25               ` Potharla, Rupesh
2022-04-20 15:22                 ` Andrew Burgess
2022-04-20 19:08                   ` Potharla, Rupesh
2022-04-22 14:38                     ` Andrew Burgess
2022-04-25  6:33                       ` Potharla, Rupesh
2022-04-25  8:47                         ` Andrew Burgess [this message]
2022-04-18 15:33             ` Kevin Buettner
2022-04-19 17:30               ` Kevin Buettner
2022-04-20  0:29                 ` Potharla, Rupesh
2022-04-20  6:32                   ` Kempke, Nils-Christian
2022-04-20 15:38                     ` Kevin Buettner
2022-04-20 15:29                   ` Andrew Burgess
2022-04-20 19:20                     ` Potharla, Rupesh

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=871qxlr1lx.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=AlokKumar.Sharma@amd.com \
    --cc=Hariharan.Parasuraman@amd.com \
    --cc=JiniSusan.George@amd.com \
    --cc=Rupesh.Potharla@amd.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tom@tromey.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).