From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18019 invoked by alias); 7 Sep 2016 06:38:50 -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 17479 invoked by uid 89); 7 Sep 2016 06:38:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=sk:propert, worker X-HELO: mga07.intel.com Received: from mga07.intel.com (HELO mga07.intel.com) (134.134.136.100) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 07 Sep 2016 06:38:38 +0000 Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga105.jf.intel.com with ESMTP; 06 Sep 2016 23:38:26 -0700 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga005.jf.intel.com with ESMTP; 06 Sep 2016 23:38:25 -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 u876cOWx012881; Wed, 7 Sep 2016 07:38:24 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id u876cOer001098; Wed, 7 Sep 2016 08:38:24 +0200 Received: (from heckel@localhost) by ulvlx001.iul.intel.com with œ id u876cOoc001094; Wed, 7 Sep 2016 08:38:24 +0200 From: Bernhard Heckel To: qiyaoltc@gmail.com, brobecker@adacore.com Cc: gdb-patches@sourceware.org, Bernhard Heckel Subject: [PATCH V4 2/6] Fortran: Resolve dynamic properties of pointer types. Date: Wed, 07 Sep 2016 06:38:00 -0000 Message-Id: <1473230295-809-3-git-send-email-bernhard.heckel@intel.com> In-Reply-To: <1473230295-809-1-git-send-email-bernhard.heckel@intel.com> References: <1473230295-809-1-git-send-email-bernhard.heckel@intel.com> X-IsSubscribed: yes X-SW-Source: 2016-09/txt/msg00064.txt.bz2 In Fortran a pointer may have a dynamic associated property. 2016-07-08 Bernhard Heckel gdb/Changelog: * gdbtypes.c (resolve_dynamic_types_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 ec5c17a..b53e649 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