From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 86ADE3858C2C for ; Fri, 22 Apr 2022 14:38:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 86ADE3858C2C Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-646-5tKc0O04OJyTTBr-QPridw-1; Fri, 22 Apr 2022 10:38:41 -0400 X-MC-Unique: 5tKc0O04OJyTTBr-QPridw-1 Received: by mail-wr1-f70.google.com with SMTP id x4-20020adfbb44000000b0020ac8fd27b6so626870wrg.10 for ; Fri, 22 Apr 2022 07:38:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=oVnnabXYEqFn4G0ryoy2KX7JEPDMzsGoZPFI9Kf62hQ=; b=ej2I2/+s1NojMi/4KtM8NSHiHGqib0kLEvtqO1oINyc0XIMbtib/nw/u9IrrWEVPIx gJ8ZAB3MYwifX2RKgfmY8PfA6AYL7R8gjgWb3aSMcotlaCCf1OMqw3ATSYq0RvZ0ey7f Fi+PQ+jId6zbkd7poJaHWdiBV1Pd3cES+JJ1Hu8dBtXyVc8gLOLTe3gZRFXdJurJzzma eCImcYZVcgL7FZDrU+SRG0q7MZdkkb1Dm2e5UJ/40HNuKgWtnv5t1sm+nQRFGeqeurv4 tZteJc5Nw8RKS5EUx2hqiQs2dZ8ilOdg807F27dUaGweJ/YkLTY+9noZcFFRRXBdDuVx SEoA== X-Gm-Message-State: AOAM531d/+01AbzenzfWLVs2Ln5P/Ja91ZQF3Pg257ZSPeqp3nR0CMb/ lBYXDOtPHr8RpamegJTjWDPRc7DipPklKTI5wtiIpKSIRYw1o47c0C7JfzpjeoBlzHejqgPNgZ6 uvT3Qcfu0g89mdTgQqE90Zw== X-Received: by 2002:a7b:c403:0:b0:38e:7c57:9af7 with SMTP id k3-20020a7bc403000000b0038e7c579af7mr4319404wmi.144.1650638319852; Fri, 22 Apr 2022 07:38:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzjO0zDyhbMQE7RUaBs1uhOILmJmkShzlNMBjNyj0pIG6GgQK8Zvsgd0E9ax4ikrEOdqhtzRA== X-Received: by 2002:a7b:c403:0:b0:38e:7c57:9af7 with SMTP id k3-20020a7bc403000000b0038e7c579af7mr4319389wmi.144.1650638319658; Fri, 22 Apr 2022 07:38:39 -0700 (PDT) Received: from localhost (host81-136-113-48.range81-136.btcentralplus.com. [81.136.113.48]) by smtp.gmail.com with ESMTPSA id 20-20020a05600c22d400b0038c8dbdc1a3sm1766394wmg.38.2022.04.22.07.38.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 07:38:38 -0700 (PDT) From: Andrew Burgess To: "Potharla\, Rupesh" , Tom Tromey , "Potharla\, Rupesh via Gdb-patches" Cc: "George\, Jini Susan" , "Parasuraman\, Hariharan" , "Sharma\, Alok Kumar" Subject: RE: GDB/Fortran: Support for Assumed Rank Zero. In-Reply-To: References: <20220413112753.4c6f1128@f35-zws-1> <20220414142845.281b878d@f35-zws-1> <20220415123112.697ff872@f35-zws-1> <87tuaqy0uz.fsf@tromey.com> <87sfq7rd94.fsf@redhat.com> Date: Fri, 22 Apr 2022 15:38:37 +0100 Message-ID: <87a6cdqj2q.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Apr 2022 14:38:44 -0000 "Potharla, Rupesh via Gdb-patches" writes: > [AMD Official Use Only] > > Thanks, Andrew, > > Made suggested code changes and attached the updated patch. Requesting > to review the code changes. Thanks, this all looks fine to me, except for one small issue... > From fbfa2f4c26eeef7547603aafafb9525d66d1b172 Mon Sep 17 00:00:00 2001 > From: rupothar > Date: Fri, 8 Apr 2022 16:05:41 +0530 > Subject: [PATCH] gdb/fortran: Support for assumed rank zero > > If a variable is passed to function in FORTRAN as an argument the > variable is treated as an array with rank zero. GDB currently does > not support the case for assumed rank 0. This patch provides support > for assumed rank 0 and updates the testcase as well. > > Without patch: > Breakpoint 1, arank::sub1 (a= failed to resolve dynamic array rank>) at assumedrank.f90:11 > 11 PRINT *, RANK(a) > (gdb) p a > failed to resolve dynamic array rank > (gdb) p rank(a) > failed to resolve dynamic array rank > > With patch: > Breakpoint 1, arank::sub1 (a=0) at assumedrank.f90:11 > 11 PRINT *, RANK(a) > (gdb) p a > $1 = 0 > (gdb) p rank(a) > $2 = 0 > --- > gdb/gdbtypes.c | 21 ++++++++++++++++----- > gdb/gdbtypes.h | 4 +++- > gdb/testsuite/gdb.fortran/assumedrank.exp | 6 ++++++ > gdb/testsuite/gdb.fortran/assumedrank.f90 | 3 +++ > 4 files changed, 28 insertions(+), 6 deletions(-) > > diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c > index 49ecb199b07..47cf442a2d5 100644 > --- a/gdb/gdbtypes.c > +++ b/gdb/gdbtypes.c > @@ -2398,10 +2398,21 @@ resolve_dynamic_array_or_string (struct type *type, > > if (rank == 0) > { > - /* The dynamic property list juggling below was from the original > - patch. I don't understand what this is all about, so I've > - commented it out for now and added the following error. */ > - error (_("failed to resolve dynamic array rank")); > + /* Rank is zero, if a variable is passed as an argument to a > + function. In this case the resolved type should not be an > + array, but should instead be that of an array element. */ > + struct type *dynamic_array_type = type; > + type = copy_type (TYPE_TARGET_TYPE (dynamic_array_type)); > + struct dynamic_prop_list *prop_list > + = TYPE_MAIN_TYPE (dynamic_array_type)->dyn_prop_list; > + if (prop_list != nullptr) > + { > + struct obstack *obstack > + = &type->objfile_owner ()->objfile_obstack; > + TYPE_MAIN_TYPE (type)->dyn_prop_list > + = copy_dynamic_prop_list (obstack, prop_list); > + } > + return type; > } > else if (type->code () == TYPE_CODE_STRING && rank != 1) > { > @@ -5589,7 +5600,7 @@ create_copied_types_hash (struct objfile *objfile) > > /* Recursively copy (deep copy) a dynamic attribute list of a type. */ > > -static struct dynamic_prop_list * > +struct dynamic_prop_list * > copy_dynamic_prop_list (struct obstack *objfile_obstack, > struct dynamic_prop_list *list) > { Please leave this as 'static', and just add a forward declaration within the gdbtypes.c. With that change, this is OK to commit. Thanks, Andrew > diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h > index 769328cc9cd..99273d14c1f 100644 > --- a/gdb/gdbtypes.h > +++ b/gdb/gdbtypes.h > @@ -2092,7 +2092,6 @@ extern void allocate_gnat_aux_type (struct type *); > #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type > #define TYPE_RVALUE_REFERENCE_TYPE(thistype) (thistype)->rvalue_reference_type > #define TYPE_CHAIN(thistype) (thistype)->chain > -#define TYPE_DYN_PROP(thistype) TYPE_MAIN_TYPE(thistype)->dyn_prop_list > /* * Note that if thistype is a TYPEDEF type, you have to call check_typedef. > But check_typedef does set the TYPE_LENGTH of the TYPEDEF type, > so you only have to call check_typedef once. Since allocate_value > @@ -2882,6 +2881,9 @@ extern struct type *copy_type_recursive (struct objfile *objfile, > struct type *type, > htab_t copied_types); > > +extern struct dynamic_prop_list * copy_dynamic_prop_list > + (struct obstack *objfile_obstack, struct dynamic_prop_list *list); > + > extern struct type *copy_type (const struct type *type); > > extern bool types_equal (struct type *, struct type *); > diff --git a/gdb/testsuite/gdb.fortran/assumedrank.exp b/gdb/testsuite/gdb.fortran/assumedrank.exp > index 69cd168125f..e9429b44a9a 100644 > --- a/gdb/testsuite/gdb.fortran/assumedrank.exp > +++ b/gdb/testsuite/gdb.fortran/assumedrank.exp > @@ -58,6 +58,12 @@ while { $test_count < 500 } { > } > } > > + # Currently, flang does not support rank0. > + if {$test_count == 1 && [test_compiler_info {clang-*}]} { > + unsupported "compiler does not support rank 0" > + continue > + } > + > if ($found_final_breakpoint) { > break > } > diff --git a/gdb/testsuite/gdb.fortran/assumedrank.f90 b/gdb/testsuite/gdb.fortran/assumedrank.f90 > index 7f077c3f014..7f7cf2c1f3e 100644 > --- a/gdb/testsuite/gdb.fortran/assumedrank.f90 > +++ b/gdb/testsuite/gdb.fortran/assumedrank.f90 > @@ -19,16 +19,19 @@ > > PROGRAM arank > > + REAL :: array0 > REAL :: array1(10) > REAL :: array2(1, 2) > REAL :: array3(3, 4, 5) > REAL :: array4(4, 5, 6, 7) > > + array0 = 0 > array1 = 1.0 > array2 = 2.0 > array3 = 3.0 > array4 = 4.0 > > + call test_rank (array0) > call test_rank (array1) > call test_rank (array2) > call test_rank (array3) > -- > 2.17.1