From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.smtpout.orange.fr (smtp-25.smtpout.orange.fr [80.12.242.25]) by sourceware.org (Postfix) with ESMTPS id 8E1263858D39 for ; Thu, 18 May 2023 19:20:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8E1263858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=orange.fr Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=orange.fr Received: from [192.168.1.16] ([86.215.161.51]) by smtp.orange.fr with ESMTPA id zjB3pcIl8JVozzjB9puBs3; Thu, 18 May 2023 21:20:48 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1684437648; bh=a9QMIgsILencnpoudnUl7fCO8SNk3yQgH7iArD3i0d0=; h=Date:From:Subject:To:Cc:References:In-Reply-To; b=QxwULxW7HbxBn8zYmZSw0+W9EKSEjfNk97ahrLg99Q/XzyhV/r7mXlb7BFLF3wyp+ XOteuiq/dyCQOixMFHYMRPr9osutxzIYOd4TwrJzv+W5/rNZuI34DesAP+gMehs8hX AboW+YS92LTE7vOQDxIAQkeCf6tV2O69l3xav7pwufy0Vi2tQ41ny/csLzZy6pBhNO KQb5jThDXKsBdM+CX1IzTvnfJCFC/pFMnItu4SBlEl6bHwKCRzFNja7VUgw+hUY3v3 IQZgXZyvVzaRuPC4zHi3FPx2PW6ubwnO4aWVov0PaezeGBhWBl8UoNkqG5X9lJq6gt W2RyfBN4rcl3g== X-ME-Helo: [192.168.1.16] X-ME-Auth: bW9yaW4tbWlrYWVsQG9yYW5nZS5mcg== X-ME-Date: Thu, 18 May 2023 21:20:48 +0200 X-ME-IP: 86.215.161.51 Message-ID: <0815cec8-7180-3f55-a479-9aea2cac7026@orange.fr> Date: Thu, 18 May 2023 21:20:41 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 From: Mikael Morin Subject: Re: [PATCH 08/14] fortran: use _P() defines from tree.h To: Bernhard Reutner-Fischer Cc: gcc-patches@gcc.gnu.org, Bernhard Reutner-Fischer , fortran@gcc.gnu.org References: <20230513232321.279733-1-rep.dot.nop@gmail.com> <20230513232321.279733-9-rep.dot.nop@gmail.com> <8beeaf61-a292-24b3-b821-ad31200d7ca6@orange.fr> <20230518171851.1e09c436@nbbrfq.loc> Content-Language: fr In-Reply-To: <20230518171851.1e09c436@nbbrfq.loc> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,JMQ_SPF_NEUTRAL,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Le 18/05/2023 à 17:18, Bernhard Reutner-Fischer a écrit : > On Sun, 14 May 2023 15:10:12 +0200 > Mikael Morin wrote: > >> Le 14/05/2023 à 01:23, Bernhard Reutner-Fischer via Gcc-patches a écrit : >>> From: Bernhard Reutner-Fischer >>> >>> gcc/fortran/ChangeLog: >>> >>> * trans-array.cc (is_pointer_array): Use _P() defines from tree.h. >>> (gfc_conv_scalarized_array_ref): Ditto. >>> (gfc_conv_array_ref): Ditto. >>> * trans-decl.cc (gfc_finish_decl): Ditto. >>> (gfc_get_symbol_decl): Ditto. >>> * trans-expr.cc (gfc_trans_pointer_assignment): Ditto. >>> (gfc_trans_arrayfunc_assign): Ditto. >>> (gfc_trans_assignment_1): Ditto. >>> * trans-intrinsic.cc (gfc_conv_intrinsic_minmax): Ditto. >>> (conv_intrinsic_ieee_value): Ditto. >>> * trans-io.cc (gfc_convert_array_to_string): Ditto. >>> * trans-openmp.cc (gfc_omp_is_optional_argument): Ditto. >>> (gfc_trans_omp_clauses): Ditto. >>> * trans-stmt.cc (gfc_conv_label_variable): Ditto. >>> * trans.cc (gfc_build_addr_expr): Ditto. >>> (get_array_span): Ditto. >> >> OK from the fortran side. >> >> Thanks > > Thanks, i'll push it during the weekend. > > I've fed gfortran.h into the script and found some CLASS_DATA spots, > see attached bootstrapped and tested patch. > Do we want to have that? Some of it makes sense, but not all of it. It is a macro to access the _data component of a class container. So for class-related stuff it makes sense to use CLASS_DATA, and typically there will be a check that the type is BT_CLASS before. But for cases where we loop over all of the components of a type that is not necessarily a class container, it doesn't make sense to use CLASS_DATA. So I suggest to only keep the following hunks. > diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc > index aa01a4d3d22..a6b4ef0a0bf 100644 > --- a/gcc/fortran/expr.cc > +++ b/gcc/fortran/expr.cc > @@ -5847,9 +5847,9 @@ gfc_get_corank (gfc_expr *e) > if (!gfc_is_coarray (e)) > return 0; > > - if (e->ts.type == BT_CLASS && e->ts.u.derived->components) > - corank = e->ts.u.derived->components->as > - ? e->ts.u.derived->components->as->corank : 0; > + if (e->ts.type == BT_CLASS && CLASS_DATA (e)) > + corank = CLASS_DATA (e)->as > + ? CLASS_DATA (e)->as->corank : 0; > else > corank = e->symtree->n.sym->as ? e->symtree->n.sym->as->corank : 0; > > diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc > index 9c92958a397..6e26fb07ddd 100644 > --- a/gcc/fortran/resolve.cc > +++ b/gcc/fortran/resolve.cc > @@ -15176,7 +15176,7 @@ resolve_component (gfc_component *c, gfc_symbol *sym) > /* Check type-spec if this is not the parent-type component. */ > if (((sym->attr.is_class > && (!sym->components->ts.u.derived->attr.extension > - || c != sym->components->ts.u.derived->components)) > + || c != CLASS_DATA (sym->components))) > || (!sym->attr.is_class > && (!sym->attr.extension || c != sym->components))) > && !sym->attr.vtype > @@ -15189,7 +15189,7 @@ resolve_component (gfc_component *c, gfc_symbol *sym) > component. */ > if (super_type > && ((sym->attr.is_class > - && c == sym->components->ts.u.derived->components) > + && c == CLASS_DATA (sym->components)) > || (!sym->attr.is_class && c == sym->components)) > && strcmp (super_type->name, c->name) == 0) > c->attr.access = super_type->attr.access; > @@ -15435,7 +15435,7 @@ resolve_fl_derived0 (gfc_symbol *sym) > return false; > } > > - c = (sym->attr.is_class) ? sym->components->ts.u.derived->components > + c = (sym->attr.is_class) ? CLASS_DATA (sym->components) > : sym->components; > > success = true; > diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc > index a7b4784d73a..6ba2040e61c 100644 > --- a/gcc/fortran/simplify.cc > +++ b/gcc/fortran/simplify.cc > @@ -3116,28 +3116,28 @@ gfc_simplify_extends_type_of (gfc_expr *a, gfc_expr *mold) > /* Return .false. if the dynamic type can never be an extension. */ > if ((a->ts.type == BT_CLASS && mold->ts.type == BT_CLASS > && !gfc_type_is_extension_of > - (mold->ts.u.derived->components->ts.u.derived, > - a->ts.u.derived->components->ts.u.derived) > + (CLASS_DATA (mold)->ts.u.derived, > + CLASS_DATA (a)->ts.u.derived) > && !gfc_type_is_extension_of > - (a->ts.u.derived->components->ts.u.derived, > - mold->ts.u.derived->components->ts.u.derived)) > + (CLASS_DATA (a)->ts.u.derived, > + CLASS_DATA (mold)->ts.u.derived)) > || (a->ts.type == BT_DERIVED && mold->ts.type == BT_CLASS > && !gfc_type_is_extension_of > - (mold->ts.u.derived->components->ts.u.derived, > + (CLASS_DATA (mold)->ts.u.derived, > a->ts.u.derived)) > || (a->ts.type == BT_CLASS && mold->ts.type == BT_DERIVED > && !gfc_type_is_extension_of > (mold->ts.u.derived, > - a->ts.u.derived->components->ts.u.derived) > + CLASS_DATA (a)->ts.u.derived) > && !gfc_type_is_extension_of > - (a->ts.u.derived->components->ts.u.derived, > + (CLASS_DATA (a)->ts.u.derived, > mold->ts.u.derived))) > return gfc_get_logical_expr (gfc_default_logical_kind, &a->where, false); > > /* Return .true. if the dynamic type is guaranteed to be an extension. */ > if (a->ts.type == BT_CLASS && mold->ts.type == BT_DERIVED > && gfc_type_is_extension_of (mold->ts.u.derived, > - a->ts.u.derived->components->ts.u.derived)) > + CLASS_DATA (a)->ts.u.derived)) > return gfc_get_logical_expr (gfc_default_logical_kind, &a->where, true); > > return NULL; > @@ -4344,8 +4344,8 @@ simplify_cobound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind, int upper) > return NULL; > > /* Follow any component references. */ > - as = (array->ts.type == BT_CLASS && array->ts.u.derived->components) > - ? array->ts.u.derived->components->as > + as = (array->ts.type == BT_CLASS && CLASS_DATA (array)) > + ? CLASS_DATA (array)->as > : array->symtree->n.sym->as; > for (ref = array->ref; ref; ref = ref->next) > { OK for those hunks. Thanks