From patchwork Mon Aug 21 12:19:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wiederhake, Tim" X-Patchwork-Id: 22257 Received: (qmail 32314 invoked by alias); 21 Aug 2017 12:20:16 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 32126 invoked by uid 89); 21 Aug 2017 12:20:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=Frank, 30913 X-HELO: mga05.intel.com Received: from mga05.intel.com (HELO mga05.intel.com) (192.55.52.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 21 Aug 2017 12:20:10 +0000 Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP; 21 Aug 2017 05:20:09 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga005.jf.intel.com with ESMTP; 21 Aug 2017 05:20:07 -0700 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id v7LCK6Pw032613; Mon, 21 Aug 2017 13:20:06 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id v7LCJxjA012936; Mon, 21 Aug 2017 14:19:59 +0200 Received: (from twiederh@localhost) by ulvlx001.iul.intel.com with LOCAL id v7LCJxBf012932; Mon, 21 Aug 2017 14:19:59 +0200 From: Tim Wiederhake To: gdb-patches@sourceware.org Cc: Frank Penczek Subject: [PATCH 1/4] Fix indentation for printing Fortran types with pointers Date: Mon, 21 Aug 2017 14:19:23 +0200 Message-Id: <1503317966-12486-2-git-send-email-tim.wiederhake@intel.com> In-Reply-To: <1503317966-12486-1-git-send-email-tim.wiederhake@intel.com> References: <1503317966-12486-1-git-send-email-tim.wiederhake@intel.com> X-IsSubscribed: yes From: Frank Penczek 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 Christoph Weinmann Bernhard Heckel 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 --- 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 diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c index 7dbe093..37d0d8e 100644 --- a/gdb/f-typeprint.c +++ b/gdb/f-typeprint.c @@ -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: diff --git a/gdb/testsuite/gdb.fortran/ptr-indentation.exp b/gdb/testsuite/gdb.fortran/ptr-indentation.exp new file mode 100644 index 0000000..ea510f1 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/ptr-indentation.exp @@ -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 . + +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"] diff --git a/gdb/testsuite/gdb.fortran/ptr-indentation.f90 b/gdb/testsuite/gdb.fortran/ptr-indentation.f90 new file mode 100644 index 0000000..045f5ef --- /dev/null +++ b/gdb/testsuite/gdb.fortran/ptr-indentation.f90 @@ -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 . + +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