[1/4] Fix indentation for printing Fortran types with pointers
Commit Message
From: Frank Penczek <frank.penczek@intel.com>
Printing the prefix "PTR TO -> (" resp. "REF TO ->(" ignored the active
indentation level. This caused inconsistent appearance of user-defined
Fortran types containing pointers. Fix by using "fprintfi_filtered" with the
current indentation level for outputting the prefix string. Add test case
ptr-indentation.
Example using 'ptype' on object of type:
type TypeWithPointer
integer i
integer, pointer:: p
end type TypeWithPointer
Before:
type = Type typewithpointer
integer(kind=4) :: i
PTR TO -> ( integer(kind=4) :: p)
End Type typewithpointer
After:
type = Type typewithpointer
integer(kind=4) :: i
PTR TO -> ( integer(kind=4) :: p)
End Type typewithpointer
xxxx-yy-zz Frank Penczek <frank.penczek@intel.com>
Christoph Weinmann <christoph.t.weinmann@intel.com>
Bernhard Heckel <bernhard.heckel@intel.com>
gdb/ChangeLog:
* f-typeprint.c (f_type_print_base): Use fprintfi_filtered
to maintain proper indentation when printing pointers/refs.
testsuite/ChangeLog
* gdb.fortran/ptr-indentation.f90: New file.
* gdb.fortran/ptr-indentation.exp: New file.
2017-08-21 Frank Penczek <frank.penczek@intel.com>
---
gdb/f-typeprint.c | 8 +++---
gdb/testsuite/gdb.fortran/ptr-indentation.exp | 41 +++++++++++++++++++++++++++
gdb/testsuite/gdb.fortran/ptr-indentation.f90 | 30 ++++++++++++++++++++
3 files changed, 75 insertions(+), 4 deletions(-)
create mode 100644 gdb/testsuite/gdb.fortran/ptr-indentation.exp
create mode 100644 gdb/testsuite/gdb.fortran/ptr-indentation.f90
Comments
Tim Wiederhake <tim.wiederhake@intel.com> writes:
> xxxx-yy-zz Frank Penczek <frank.penczek@intel.com>
> Christoph Weinmann <christoph.t.weinmann@intel.com>
> Bernhard Heckel <bernhard.heckel@intel.com>
>
> gdb/ChangeLog:
>
> * f-typeprint.c (f_type_print_base): Use fprintfi_filtered
> to maintain proper indentation when printing pointers/refs.
>
> testsuite/ChangeLog
>
> * gdb.fortran/ptr-indentation.f90: New file.
> * gdb.fortran/ptr-indentation.exp: New file.
Patch is good to me.
Thanks!
Pushed as a5ad232b3e6f39cf2955a8ec3aa4355359a9f72e.
Tim
> -----Original Message-----
> From: Yao Qi [mailto:qiyaoltc@gmail.com]
> Sent: Monday, September 4, 2017 3:36 PM
> To: Wiederhake, Tim <tim.wiederhake@intel.com>
> Cc: gdb-patches@sourceware.org; Penczek, Frank <frank.penczek@intel.com>
> Subject: Re: [PATCH 1/4] Fix indentation for printing Fortran types with
> pointers
>
> Tim Wiederhake <tim.wiederhake@intel.com> writes:
>
> > xxxx-yy-zz Frank Penczek <frank.penczek@intel.com>
> > Christoph Weinmann <christoph.t.weinmann@intel.com>
> > Bernhard Heckel <bernhard.heckel@intel.com>
> >
> > gdb/ChangeLog:
> >
> > * f-typeprint.c (f_type_print_base): Use fprintfi_filtered
> > to maintain proper indentation when printing pointers/refs.
> >
> > testsuite/ChangeLog
> >
> > * gdb.fortran/ptr-indentation.f90: New file.
> > * gdb.fortran/ptr-indentation.exp: New file.
>
> Patch is good to me.
>
> --
> Yao (齐尧)
Intel Deutschland GmbH
Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Christin Eisenschmid, Christian Lamprechter
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
@@ -309,13 +309,13 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show,
break;
case TYPE_CODE_PTR:
- fprintf_filtered (stream, "PTR TO -> ( ");
- f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
+ fprintfi_filtered (level, stream, "PTR TO -> ( ");
+ f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
break;
case TYPE_CODE_REF:
- fprintf_filtered (stream, "REF TO -> ( ");
- f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
+ fprintfi_filtered (level, stream, "REF TO -> ( ");
+ f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
break;
case TYPE_CODE_VOID:
new file mode 100644
@@ -0,0 +1,41 @@
+# Copyright 2017 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/>.
+
+if {[skip_fortran_tests]} { return -1 }
+
+standard_testfile .f90
+load_lib fortran.exp
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}]} {
+ return -1
+}
+
+if {![runto MAIN__]} then {
+ untested "couldn't run to breakpoint MAIN__"
+ return -1
+}
+
+set int [fortran_int4]
+set real [fortran_real4]
+
+gdb_breakpoint [gdb_get_line_number "BP1"]
+gdb_continue_to_breakpoint "BP1"
+
+# Check the indentation when using ptype on pointers in user-defined types.
+gdb_test "ptype tinsta" \
+ [multi_line "type = Type tuserdef" \
+ " $int :: i" \
+ " PTR TO -> \\( $real :: ptr\\)" \
+ "End Type tuserdef"]
new file mode 100644
@@ -0,0 +1,30 @@
+! Copyright 2017 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/>.
+
+program main
+ implicit none
+
+ type tuserdef
+ integer :: i
+ real, pointer :: ptr
+ end type tuserdef
+ real, target :: rval
+
+ type(tuserdef), target:: tinsta,tinstb,tinstc
+
+ tinsta%i = 4
+ tinsta%ptr => rval !BP1
+
+end program main