From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26221 invoked by alias); 15 Jul 2011 18:09:07 -0000 Received: (qmail 26211 invoked by uid 22791); 15 Jul 2011 18:09:07 -0000 X-SWARE-Spam-Status: No, hits=-6.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_GD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 15 Jul 2011 18:08:53 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p6FI8q9b005453 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 15 Jul 2011 14:08:53 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p6FI8qXR007852; Fri, 15 Jul 2011 14:08:52 -0400 Received: from barimba (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id p6FI8pCV013925; Fri, 15 Jul 2011 14:08:51 -0400 From: Tom Tromey To: gdb-patches@sourceware.org Subject: [4/4] RFC: dynamic arrays and DW_FORM_exprloc CC: Jan Kratochvil Date: Fri, 15 Jul 2011 18:25:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain 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 X-SW-Source: 2011-07/txt/msg00395.txt.bz2 A -gdwarf-4 regression: -PASS: gdb.fortran/multi-dim.exp: print valid variable bound array element +FAIL: gdb.fortran/multi-dim.exp: print valid variable bound array element The bug here is that with DWARF 4, GCC uses DW_FORM_exprloc when emitting the bounds of a variably-sized array. GDB, however, only checks for DW_FORM_block1. Jan, any comments? Built and regtested by the buildbot. Tom b/gdb/ChangeLog: 2011-07-15 Tom Tromey * dwarf2read.c (read_subrange_type): Check for DW_FORM_exprloc for variable-sized array. >From fcf10915409297cb512e12e3b8ef285aa125dfc6 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 15 Jul 2011 11:35:35 -0600 Subject: [PATCH 4/4] also recognize DW_FORM_exprloc as dynamic range --- gdb/ChangeLog | 5 +++++ gdb/dwarf2read.c | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 8a6b142..fe6f189 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -8623,7 +8623,9 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf2_attr (die, DW_AT_upper_bound, cu); if (attr) { - if (attr->form == DW_FORM_block1 || is_ref_attr (attr)) + if (attr->form == DW_FORM_block1 + || attr->form == DW_FORM_exprloc + || is_ref_attr (attr)) { /* GCC encodes arrays with unspecified or dynamic length with a DW_FORM_block1 attribute or a reference attribute. @@ -8706,7 +8708,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) /* Mark arrays with dynamic length at least as an array of unspecified length. GDB could check the boundary but before it gets implemented at least allow accessing the array elements. */ - if (attr && attr->form == DW_FORM_block1) + if (attr && (attr->form == DW_FORM_block1 + || attr->form == DW_FORM_exprloc)) TYPE_HIGH_BOUND_UNDEFINED (range_type) = 1; /* Ada expects an empty array on no boundary attributes. */ -- 1.7.6