From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 62053 invoked by alias); 14 Oct 2016 11:54:27 -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 61996 invoked by uid 89); 14 Oct 2016 11:54:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=no version=3.3.2 spammy=Worker, sk:propert X-HELO: mga11.intel.com Received: from mga11.intel.com (HELO mga11.intel.com) (192.55.52.93) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 14 Oct 2016 11:54:15 +0000 Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP; 14 Oct 2016 04:54:15 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga003.jf.intel.com with ESMTP; 14 Oct 2016 04:54:13 -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 u9EBsC4i014359; Fri, 14 Oct 2016 12:54:12 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id u9EBsCQV010693; Fri, 14 Oct 2016 13:54:12 +0200 Received: (from heckel@localhost) by ulvlx001.iul.intel.com with œ id u9EBsCdp010690; Fri, 14 Oct 2016 13:54:12 +0200 From: Bernhard Heckel To: qiyaoltc@gmail.com, brobecker@adacore.com Cc: gdb-patches@sourceware.org, Bernhard Heckel Subject: [PATCH V5 2/6] Fortran: Resolve dynamic properties of pointer types. Date: Fri, 14 Oct 2016 11:54:00 -0000 Message-Id: <1476446044-10408-3-git-send-email-bernhard.heckel@intel.com> In-Reply-To: <1476446044-10408-1-git-send-email-bernhard.heckel@intel.com> References: <1476446044-10408-1-git-send-email-bernhard.heckel@intel.com> X-IsSubscribed: yes X-SW-Source: 2016-10/txt/msg00438.txt.bz2 In Fortran a pointer may have a dynamic associated property. 2016-07-08 Bernhard Heckel gdb/Changelog: * gdbtypes.c (is_dynamic_type_internal): Resolve pointer types. (resolve_dynamic_pointer): New. --- gdb/gdbtypes.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index ad890ca..33a8b7c 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1806,7 +1806,8 @@ is_dynamic_type_internal (struct type *type, int top_level) type = check_typedef (type); /* We only want to recognize references at the outermost level. */ - if (top_level && TYPE_CODE (type) == TYPE_CODE_REF) + if (top_level && + (TYPE_CODE (type) == TYPE_CODE_REF || TYPE_CODE (type) == TYPE_CODE_PTR)) type = check_typedef (TYPE_TARGET_TYPE (type)); /* Types that have a dynamic TYPE_DATA_LOCATION are considered @@ -2105,6 +2106,28 @@ resolve_dynamic_struct (struct type *type, return resolved_type; } +/* Worker for pointer types. */ + +static struct type * +resolve_dynamic_pointer (struct type *type, + struct property_addr_info *addr_stack) +{ + struct dynamic_prop *prop; + CORE_ADDR value; + + type = copy_type (type); + + /* Resolve associated property. */ + prop = TYPE_ASSOCIATED_PROP (type); + if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) + { + TYPE_DYN_PROP_ADDR (prop) = value; + TYPE_DYN_PROP_KIND (prop) = PROP_CONST; + } + + return type; +} + /* Worker for resolved_dynamic_type. */ static struct type * @@ -2153,6 +2176,10 @@ resolve_dynamic_type_internal (struct type *type, break; } + case TYPE_CODE_PTR: + resolved_type = resolve_dynamic_pointer (type, addr_stack); + break; + case TYPE_CODE_ARRAY: resolved_type = resolve_dynamic_array (type, addr_stack); break; -- 2.7.1.339.g0233b80