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,
>
next prev parent 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).