From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22413 invoked by alias); 17 Mar 2016 08:43:35 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 22396 invoked by uid 89); 17 Mar 2016 08:43:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=no version=3.3.2 spammy=388, 963, 38,6, gdbfortran X-HELO: mga04.intel.com Received: from mga04.intel.com (HELO mga04.intel.com) (192.55.52.120) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 17 Mar 2016 08:43:31 +0000 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP; 17 Mar 2016 01:43:29 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 17 Mar 2016 01:43:28 -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 u2H8hSs9013679; Thu, 17 Mar 2016 08:43:28 GMT Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id u2H8hRoW013524; Thu, 17 Mar 2016 09:43:27 +0100 Received: (from heckel@localhost) by ulvlx001.iul.intel.com with œ id u2H8hR89013520; Thu, 17 Mar 2016 09:43:27 +0100 From: Bernhard Heckel To: brobecker@adacore.com Cc: gdb-patches@sourceware.org, Bernhard Heckel Subject: [PATCH 2/3] fort_dyn_array: Support evaluation of dynamic elements inside arrays. Date: Thu, 17 Mar 2016 08:43:00 -0000 Message-Id: <1458204189-13267-3-git-send-email-bernhard.heckel@intel.com> In-Reply-To: <1458204189-13267-1-git-send-email-bernhard.heckel@intel.com> References: <1458204189-13267-1-git-send-email-bernhard.heckel@intel.com> X-SW-Source: 2016-03/txt/msg00290.txt.bz2 Resolve type of an array's element to be printed in case it is dynamic. Otherwise we don't use the correct boundaries nor the right location. Before: ptype fivearr(1) type = Type five Type one integer(kind=4) :: ivla(34196784:34196832,34197072:34197120,34197360:34197408) End Type one :: tone End Type five After: ptype fivearr(1) type = Type five Type one integer(kind=4) :: ivla(2,4,6) End Type one :: tone End Type five 2016-02-24 Bernhard Heckel gdb/Changelog: * valarith.c (value_address): Resolve dynamic types. gdb/testsuite/Changelog: * gdb.fortran/vla-type.f90: Add test for static and dynamic arrays of dynamic types. * gdb.fortran/vla-type.exp: Add test for static and dynamic arrays of dynamic types. --- gdb/testsuite/gdb.fortran/vla-type.exp | 52 ++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.fortran/vla-type.f90 | 20 +++++++++++-- gdb/valarith.c | 9 ++++++ 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/gdb.fortran/vla-type.exp b/gdb/testsuite/gdb.fortran/vla-type.exp index 1d09451..f9c0b61 100755 --- a/gdb/testsuite/gdb.fortran/vla-type.exp +++ b/gdb/testsuite/gdb.fortran/vla-type.exp @@ -96,3 +96,55 @@ gdb_test "ptype fivev" \ "\\s+integer\\\(kind=4\\\) :: ivla\\\(10,10,10\\\)" \ "\\s+End Type one :: tone" \ "End Type five" ] + +# Check array of types containing a VLA +gdb_breakpoint [gdb_get_line_number "fivearr-filled"] +gdb_continue_to_breakpoint "fivearr-filled" +gdb_test "print fivearr(1)%tone%ivla(1, 2, 3)" " = 1" +gdb_test "print fivearr(1)%tone%ivla(2, 2, 10)" "no such vector element" +gdb_test "print fivearr(1)%tone%ivla(2, 2, 3)" " = 223" +gdb_test "print fivearr(2)%tone%ivla(12, 14, 16)" " = 2" +gdb_test "print fivearr(2)%tone%ivla(6, 7, 8)" " = 678" +gdb_test "ptype fivearr(1)" \ + [multi_line "type = Type five" \ + "\\s+Type one" \ + "\\s+integer\\\(kind=4\\\) :: ivla\\\(2,4,6\\\)" \ + "\\s+End Type one :: tone" \ + "End Type five" ] +gdb_test "ptype fivearr(2)" \ + [multi_line "type = Type five" \ + "\\s+Type one" \ + "\\s+integer\\\(kind=4\\\) :: ivla\\\(12,14,16\\\)" \ + "\\s+End Type one :: tone" \ + "End Type five" ] + +# Check allocation status of dynamic array and it's dynamic members +gdb_test "ptype fivedynarr" "type = " +gdb_test "next" "" +gdb_test "ptype fivedynarr(2)" \ + [multi_line "type = Type five" \ + "\\s+Type one" \ + "\\s+integer\\\(kind=4\\\) :: ivla\\\(\\\)" \ + "\\s+End Type one :: tone" \ + "End Type five" ] + +# Check dynamic array of types containing a VLA +gdb_breakpoint [gdb_get_line_number "fivedynarr-filled"] +gdb_continue_to_breakpoint "fivedynarr-filled" +gdb_test "print fivedynarr(1)%tone%ivla(1, 2, 3)" " = 1" +gdb_test "print fivedynarr(1)%tone%ivla(2, 2, 10)" "no such vector element" +gdb_test "print fivedynarr(1)%tone%ivla(2, 2, 3)" " = 223" +gdb_test "print fivedynarr(2)%tone%ivla(12, 14, 16)" " = 2" +gdb_test "print fivedynarr(2)%tone%ivla(6, 7, 8)" " = 678" +gdb_test "ptype fivedynarr(1)" \ + [multi_line "type = Type five" \ + "\\s+Type one" \ + "\\s+integer\\\(kind=4\\\) :: ivla\\\(2,4,6\\\)" \ + "\\s+End Type one :: tone" \ + "End Type five" ] +gdb_test "ptype fivedynarr(2)" \ + [multi_line "type = Type five" \ + "\\s+Type one" \ + "\\s+integer\\\(kind=4\\\) :: ivla\\\(12,14,16\\\)" \ + "\\s+End Type one :: tone" \ + "End Type five" ] diff --git a/gdb/testsuite/gdb.fortran/vla-type.f90 b/gdb/testsuite/gdb.fortran/vla-type.f90 index a106617..5473124 100755 --- a/gdb/testsuite/gdb.fortran/vla-type.f90 +++ b/gdb/testsuite/gdb.fortran/vla-type.f90 @@ -38,6 +38,8 @@ program vla_struct type(three) :: threev type(four) :: fourv type(five) :: fivev + type(five) :: fivearr (2) + type(five), allocatable :: fivedynarr (:) logical :: l integer :: i, j @@ -83,6 +85,20 @@ program vla_struct fivev%tone%ivla(1, 2, 3) = 123 fivev%tone%ivla(3, 2, 1) = 321 - ! dummy statement for bp - l = allocated(fivev%tone%ivla) ! fivev-filled + allocate (fivearr(1)%tone%ivla (2, 4, 6)) ! fivev-filled + allocate (fivearr(2)%tone%ivla (12, 14, 16)) + fivearr(1)%tone%ivla(:, :, :) = 1 + fivearr(1)%tone%ivla(2, 2, 3) = 223 + fivearr(2)%tone%ivla(:, :, :) = 2 + fivearr(2)%tone%ivla(6, 7, 8) = 678 + + allocate (fivedynarr(2)) ! fivearr-filled + allocate (fivedynarr(1)%tone%ivla (2, 4, 6)) + allocate (fivedynarr(2)%tone%ivla (12, 14, 16)) + fivedynarr(1)%tone%ivla(:, :, :) = 1 + fivedynarr(1)%tone%ivla(2, 2, 3) = 223 + fivedynarr(2)%tone%ivla(:, :, :) = 2 + fivedynarr(2)%tone%ivla(6, 7, 8) = 678 + + l = allocated(fivedynarr) ! fivedynarr-filled end program vla_struct diff --git a/gdb/valarith.c b/gdb/valarith.c index 7959f3b..62d0e30 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -207,6 +207,15 @@ value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound) error (_("no such vector element")); } + if (is_dynamic_type (elt_type)) + { + gdb_byte *valaddr = NULL; + CORE_ADDR address; + + address = value_address (array) + elt_offs; + elt_type = resolve_dynamic_type (elt_type, valaddr, address); + } + if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) v = allocate_value_lazy (elt_type); else -- 2.7.1.339.g0233b80