From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7505 invoked by alias); 29 Apr 2016 08:18:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 7471 invoked by uid 89); 29 Apr 2016 08:18:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=BAYES_00,KAM_ASCII_DIVIDERS,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=magnitude, irregularity, Hx-languages-length:2780, Great X-Spam-User: qpsmtpd, 2 recipients X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Fri, 29 Apr 2016 08:18:14 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 550EAAD11; Fri, 29 Apr 2016 08:18:11 +0000 (UTC) Date: Fri, 29 Apr 2016 08:18:00 -0000 From: Richard Biener To: Eric Botcazou cc: gcc-patches@gcc.gnu.org, jason@redhat.com, fortran@gcc.gnu.org Subject: Re: [PATCH] Fix type field walking in gimplifier unsharing In-Reply-To: <1996638.VYKIi6TYiV@polaris> Message-ID: References: <1996638.VYKIi6TYiV@polaris> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2016-04/txt/msg01943.txt.bz2 On Fri, 29 Apr 2016, Eric Botcazou wrote: > > The following works (for the testcase): > > > > Index: gcc/cp/decl.c > > =================================================================== > > --- gcc/cp/decl.c (revision 235547) > > +++ gcc/cp/decl.c (working copy) > > @@ -10393,8 +10393,11 @@ grokdeclarator (const cp_declarator *dec > > && (decl_context == NORMAL || decl_context == FIELD) > > && at_function_scope_p () > > && variably_modified_type_p (type, NULL_TREE)) > > - /* Force evaluation of the SAVE_EXPR. */ > > - finish_expr_stmt (TYPE_SIZE (type)); > > + { > > + TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL, > > + NULL_TREE, type); > > + add_decl_expr (TYPE_NAME (type)); > > + } > > > > if (declarator->kind == cdk_reference) > > { > > > > and I have a similar fix for the Fortran FE for one testcase I > > reduced to > > > > character(10), dimension (2) :: implicit_result > > character(10), dimension (2) :: source > > implicit_result = reallocate_hnv (LEN (source)) > > contains > > FUNCTION reallocate_hnv(LEN) > > CHARACTER(LEN=LEN), DIMENSION(:), POINTER :: reallocate_hnv > > END FUNCTION reallocate_hnv > > end > > > > Index: fortran/trans-array.c > > =================================================================== > > --- fortran/trans-array.c (revision 235547) > > +++ fortran/trans-array.c (working copy) > > @@ -1094,6 +1094,16 @@ gfc_trans_create_temp_array (stmtblock_t > > info->descriptor = desc; > > size = gfc_index_one_node; > > > > + /* Emit a DECL_EXPR for the variable sized array type in > > + GFC_TYPE_ARRAY_DATAPTR_TYPE so the gimplification of its type > > + sizes works correctly. */ > > + tree arraytype = TREE_TYPE (GFC_TYPE_ARRAY_DATAPTR_TYPE (type)); > > + if (! TYPE_NAME (arraytype)) > > + TYPE_NAME (arraytype) = build_decl (UNKNOWN_LOCATION, TYPE_DECL, > > + NULL_TREE, arraytype); > > + gfc_add_expr_to_block (pre, build1 (DECL_EXPR, > > + arraytype, TYPE_NAME (arraytype))); > > + > > /* Fill in the array dtype. */ > > tmp = gfc_conv_descriptor_dtype (desc); > > gfc_add_modify (pre, tmp, gfc_get_dtype (TREE_TYPE (desc))); > > Great. We do exactly that in the Ada compiler (but of course the number of > places where we need to do it is an order of magnitude larger). > > > I wonder if we can avoid allocating the TYPE_DECL by simply also > > allowing TREE_TYPE as operand of a DECL_EXPR (to avoid adding > > a 'TYPE_EXPR'). > > I agree that DECL_EXPR + TYPE_DECL is a bit heavy, but I'm not sure that the > benefit would be worth introducing the irregularity in the IL. Not sure either. I'll add a helper like build_decl_expr_for_type that does the magic (if TYPE_NAME is NULL). That at least reduces the amount of code duplication. Richard.