public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Richard Bunt <Richard.Bunt@arm.com>
To: Pawel Wodkowski <pwodkowski@pl.sii.eu>,
	"gdb-patches@sourceware.org"	<gdb-patches@sourceware.org>,
	"murbanski@pl.sii.eu" <murbanski@pl.sii.eu>,
	"sbasierski@pl.sii.eu" <sbasierski@pl.sii.eu>
Cc: "tim.wiederhake@intel.com" <tim.wiederhake@intel.com>,
	"dragos.carciumaru@intel.com" <dragos.carciumaru@intel.com>,
	Bernhard Heckel	<bernhard.heckel@intel.com>, nd <nd@arm.com>
Subject: Re: [PATCH v2 3/7] Fortran: Accessing fields of inherited types via fully qualified name.
Date: Mon, 03 Dec 2018 13:44:00 -0000	[thread overview]
Message-ID: <88ec6786-8834-7da2-207a-7392fd657e41@arm.com> (raw)
In-Reply-To: <1542663530-140490-3-git-send-email-pwodkowski@pl.sii.eu>

Hi Pawel,

Is there a compiler where all the marked kfails pass? I've given this patch a spin
with the Fortran compilers from various vendors, but there is a varying number of kfails.

I'd like to test everything if possible.

Many thanks,

Rich

On 11/19/18 9:38 PM, Pawel Wodkowski wrote:
> From: Bernhard Heckel <bernhard.heckel@intel.com>
> 
> Fortran 2003 supports type extension. This patch allows access
> to inherited members by using it's fully qualified name as
> described in the fortran standard.
> 
> Before:
> (gdb) print my_extended_obj%base_class_name%member_base
> Syntax error near base_class_name%member_base
> 
> (gdb) print my_extended_obj%member_base
> $1 = (10, 10, 10)
> 
> After:
> (gdb) print my_extended_obj%base_clase_name%member_base
> $1 = (10, 10, 10)
> 
> (gdb) print my_extended_obj%member_base
> $1 = (10, 10, 10)
> 
> 2016-04-22  Bernhard Heckel  <bernhard.heckel@intel.com>
> 
> gdb/Changelog:
> 	* f-exp.y (name): Allow TYPENAME.
> 	* valops.c (search_struct_method): Look also for baseclass.
> 
> gdb/Testsuite/Changelog:
> 	* gdb.fortran/oop-extend-type.f90: New.
> 	* gdb.fortran/oop-extend-type.exp: New.
> ---
>  gdb/f-exp.y                                   |   7 +-
>  gdb/testsuite/gdb.fortran/oop-extend-type.exp | 113 ++++++++++++++++++++++++++
>  gdb/testsuite/gdb.fortran/oop-extend-type.f90 |  56 +++++++++++++
>  gdb/valops.c                                  |   6 ++
>  4 files changed, 180 insertions(+), 2 deletions(-)
>  create mode 100644 gdb/testsuite/gdb.fortran/oop-extend-type.exp
>  create mode 100644 gdb/testsuite/gdb.fortran/oop-extend-type.f90
> 
> diff --git a/gdb/f-exp.y b/gdb/f-exp.y
> index 390bd45081b7..4c2e101699ac 100644
> --- a/gdb/f-exp.y
> +++ b/gdb/f-exp.y
> @@ -604,8 +604,11 @@ nonempty_typelist
>  		}
>  	;
>  
> -name	:	NAME
> -		{  $$ = $1.stoken; }
> +name
> +	:	NAME
> +		{ $$ = $1.stoken; }
> +	|	TYPENAME
> +		{ $$ = $1.stoken; }
>  	;
>  
>  name_not_typename :	NAME
> diff --git a/gdb/testsuite/gdb.fortran/oop-extend-type.exp b/gdb/testsuite/gdb.fortran/oop-extend-type.exp
> new file mode 100644
> index 000000000000..8c3bb50a3ac6
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/oop-extend-type.exp
> @@ -0,0 +1,113 @@
> +# Copyright 2018 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/>.
> +
> +standard_testfile ".f90"
> +load_lib "fortran.exp"
> +
> +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
> +     {debug f90 quiet}] } {
> +	 return -1
> +}
> +
> +if ![runto_main] {
> +    untested "could not run to main"
> +    return -1
> +}
> +
> +# Depending on the compiler being used, the type names can be printed differently.
> +set real [fortran_real4]
> +
> +gdb_breakpoint [gdb_get_line_number "! Before vla allocation"]
> +gdb_continue_to_breakpoint "! Before vla allocation" ".*! Before vla allocation"
> +gdb_test "whatis wp_vla" "type = <not allocated>"
> +
> +gdb_breakpoint [gdb_get_line_number "! After value assignment"]
> +gdb_continue_to_breakpoint "! After value assignment" ".*! After value assignment"
> +set test "p wp%coo"
> +gdb_test_multiple "$test" "$test" {
> +    -re " = \\(1, 2, 1\\)\r\n$gdb_prompt $" {
> +      pass "$test"
> +    }
> +    -re "There is no member named coo.\r\n$gdb_prompt $" {
> +      kfail "gcc/49475" "$test"
> +    }
> +}
> +gdb_test "p wp%point%coo" " = \\(1, 2, 1\\)"
> +gdb_test "p wp%point" " = \\( coo = \\(1, 2, 1\\) \\)"
> +gdb_test "p wp" " = \\( point = \\( coo = \\(1, 2, 1\\) \\), angle = 100 \\)"
> +
> +gdb_test "whatis wp" "type = Type waypoint"
> +set output_pass [multi_line "type = Type, extends\\(point\\) :: waypoint" \
> +              "    Type point :: point" \
> +              "    $real :: angle" \
> +              "End Type waypoint"]
> +set output_kfail [multi_line "type = Type waypoint" \
> +"    Type point :: point" \
> +"    $real :: angle" \
> +"End Type waypoint"]
> +set test "ptype wp"
> +gdb_test_multiple $test %test {
> +    -re "$output_pass\r\n$gdb_prompt $" {
> +      pass "$test"
> +    }
> +    -re "$output_kfail\r\n$gdb_prompt $" {
> +      kfail "gcc/49475" "$test"
> +    }
> +}
> +
> +set test "ptype wp%coo"
> +gdb_test_multiple "$test" "$test" {
> +    -re "$real \\(3\\)\r\n$gdb_prompt $" {
> +      pass "$test"
> +    }
> +    -re "There is no member named coo.\r\n$gdb_prompt $" {
> +      kfail "gcc/49475" "$test"
> +    }
> +}
> +gdb_test "ptype wp%point%coo" "$real \\(3\\)"
> +
> +set test "p wp_vla(1)%coo"
> +gdb_test_multiple "$test" "$test" {
> +    -re " = \\(10, 12, 10\\)\r\n$gdb_prompt $" {
> +      pass "$test"
> +    }
> +    -re "There is no member named coo.\r\n$gdb_prompt $" {
> +      kfail "gcc/49475" "$test"
> +    }
> +}
> +gdb_test "p wp_vla(1)%point%coo" " = \\(10, 12, 10\\)"
> +gdb_test "p wp_vla(1)%point" " = \\( coo = \\(10, 12, 10\\) \\)"
> +gdb_test "p wp_vla(1)" " = \\( point = \\( coo = \\(10, 12, 10\\) \\), angle = 101 \\)"
> +
> +gdb_test "whatis wp_vla" "type = Type waypoint \\(3\\)"
> +set test "ptype wp_vla"
> +gdb_test_multiple $test %test {
> +    -re "$output_pass \\(3\\)\r\n$gdb_prompt $" {
> +      pass "$test"
> +    }
> +    -re "$output_kfail \\(3\\)\r\n$gdb_prompt $" {
> +      kfail "gcc/49475" "$test"
> +    }
> +}
> +set test "ptype wp_vla(1)%coo"
> +gdb_test_multiple "$test" "$test" {
> +    -re "$real \\(3\\)\r\n$gdb_prompt $" {
> +      pass "$test"
> +    }
> +    -re "There is no member named coo.\r\n$gdb_prompt $" {
> +      kfail "gcc/49475" "$test"
> +    }
> +}
> +gdb_test "ptype wp_vla(1)%point%coo" "$real \\(3\\)"
> diff --git a/gdb/testsuite/gdb.fortran/oop-extend-type.f90 b/gdb/testsuite/gdb.fortran/oop-extend-type.f90
> new file mode 100644
> index 000000000000..1fe8611f4632
> --- /dev/null
> +++ b/gdb/testsuite/gdb.fortran/oop-extend-type.f90
> @@ -0,0 +1,56 @@
> +! Copyright 2018 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/>.
> +
> +module testmod
> +    implicit none
> +    type :: point
> +        real :: coo(3)
> +    end type
> +
> +    type, extends(point) :: waypoint
> +        real :: angle
> +    end type
> +
> +end module
> +
> +program testprog
> +    use testmod
> +    implicit none
> +
> +    logical l
> +    type(waypoint) :: wp
> +    type(waypoint), allocatable :: wp_vla(:)
> +
> +    l = allocated(wp_vla)
> +    allocate(wp_vla(3))               ! Before vla allocation
> +
> +    l = allocated(wp_vla)             ! After vla allocation
> +    wp%angle = 100.00
> +    wp%point%coo(:) = 1.00
> +    wp%point%coo(2) = 2.00
> +
> +    wp_vla(1)%angle = 101.00
> +    wp_vla(1)%point%coo(:) = 10.00
> +    wp_vla(1)%point%coo(2) = 12.00
> +    wp_vla(2)%angle = 102.00
> +    wp_vla(2)%point%coo(:) = 20.00
> +    wp_vla(2)%point%coo(2) = 22.00
> +    wp_vla(3)%angle = 103.00
> +    wp_vla(3)%point%coo(:) = 30.00
> +    wp_vla(3)%point%coo(2) = 32.00
> +
> +    print *, wp, wp_vla               ! After value assignment
> +
> +end program
> diff --git a/gdb/valops.c b/gdb/valops.c
> index c45caefbf1e0..a34e74b2bee9 100644
> --- a/gdb/valops.c
> +++ b/gdb/valops.c
> @@ -2163,6 +2163,12 @@ value_struct_elt (struct value **argp, struct value **args,
>        if (v)
>  	return v;
>  
> +      /* fortran: If it is not a field it is the
> +         type name of an inherited structure */
> +      v = search_struct_field (name, *argp, t, 1);
> +      if (v)
> +	return v;
> +
>        /* C++: If it was not found as a data field, then try to
>           return it as a pointer to a method.  */
>        v = search_struct_method (name, argp, args, 0, 
> 

  reply	other threads:[~2018-12-03 13:44 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-19 21:40 [PATCH v2 1/7] DWARF: Don't add nameless modules to partial symbol table Pawel Wodkowski
2018-11-19 21:40 ` [PATCH v2 3/7] Fortran: Accessing fields of inherited types via fully qualified name Pawel Wodkowski
2018-12-03 13:44   ` Richard Bunt [this message]
2018-12-04 21:05     ` Paweł Wódkowski
2018-12-06 15:03       ` Richard Bunt
2018-12-09 20:41         ` Paweł Wódkowski
2019-01-16 11:11           ` Richard Bunt
2019-01-18  8:33             ` Paweł Wódkowski
2019-01-30 11:10               ` Richard Bunt
2019-02-06 12:39                 ` Paweł Wódkowski
2018-11-19 21:40 ` [PATCH v2 5/7] Fortran: Enable setting breakpoint on nested functions Pawel Wodkowski
2018-11-28 10:32   ` Richard Bunt
2018-12-02 22:16     ` Paweł Wódkowski
2018-11-19 21:40 ` [PATCH v2 6/7] Fortran: Nested functions, add scope parameter Pawel Wodkowski
2018-11-19 21:40 ` [PATCH v2 4/7] Fortran: Ptype, print type extension Pawel Wodkowski
2019-02-01 13:06   ` Andrew Burgess
2018-11-19 21:40 ` [PATCH v2 7/7] Fortran: Document scope operator Pawel Wodkowski
2018-11-20  5:01   ` Eli Zaretskii
2018-11-22 16:14     ` Paweł Wódkowski
2018-11-23 10:31       ` Eli Zaretskii
2018-11-19 21:40 ` [PATCH v2 2/7] Dwarf: Fortran, support DW_TAG_entry_point Pawel Wodkowski
2018-11-27 22:09   ` Andrew Burgess
2018-12-02 21:32     ` Paweł Wódkowski
2018-11-27 19:35 ` PING Re: [PATCH v2 1/7] DWARF: Don't add nameless modules to partial symbol table Pawel Wodkowski
2018-11-27 20:29 ` Simon Marchi
2018-11-27 21:42 ` Andrew Burgess
2018-12-02 21:01   ` Paweł Wódkowski

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=88ec6786-8834-7da2-207a-7392fd657e41@arm.com \
    --to=richard.bunt@arm.com \
    --cc=bernhard.heckel@intel.com \
    --cc=dragos.carciumaru@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=murbanski@pl.sii.eu \
    --cc=nd@arm.com \
    --cc=pwodkowski@pl.sii.eu \
    --cc=sbasierski@pl.sii.eu \
    --cc=tim.wiederhake@intel.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).