From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 110026 invoked by alias); 11 Sep 2017 19:47:43 -0000 Mailing-List: contact fortran-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: fortran-owner@gcc.gnu.org Received: (qmail 110003 invoked by uid 89); 11 Sep 2017 19:47:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=no version=3.3.2 spammy=PR34640, pr34640 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-io0-f170.google.com Received: from mail-io0-f170.google.com (HELO mail-io0-f170.google.com) (209.85.223.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 11 Sep 2017 19:47:39 +0000 Received: by mail-io0-f170.google.com with SMTP id j141so33610823ioj.4; Mon, 11 Sep 2017 12:47:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Xiu3zH/tAy1pFv6tmViQtErxmCx6LEq9kkUEBc6DgFk=; b=cYWdop8K9qFcsqmE3sJTmRgu4ob0LDoD5PjsaKaILT2kQOoV+e9S8PS2g+fqcCR1X2 Usu2h991N7BBsb+hpT160FvnK1uI5UQ3XaX9eNb2b5zCeLOG8s4Ok8qoJJMM/V0NORVH hmVk7yMqr1cxOWBOMO44X2EjnPTe7VB/XKFM5U9FbcZfN17XyngQuB840JR2grVuJecp hFRxqZu8GBojcoae2SXeu7AGeC18REKpZoahHfz+gJYubNwfYwTlbNVUJfYiSIVaRib7 ulZamid8jTJDfrMgv0aFp19HkZEKZXWQtiFxr61WVAd2ct82rU98Uf+24Gv4UFpGVxz6 F/YQ== X-Gm-Message-State: AHPjjUjgsBQVi1ukV+IVBMxTz+96zQPj1+Kcr7aIw1SoSYBdgHDG5m+U og2jw+X/iVdE4XpT00CCjJA5pvAlK7pB X-Google-Smtp-Source: AOwi7QB2wJeh4vxG2+qtGqia26R85iu/H3pa3VKwBYxjWtLuigqC6gQ4iDxPM59LCt0mHbswlMaXu3x1ZU16YNKrwHs= X-Received: by 10.202.117.13 with SMTP id q13mr11424877oic.97.1505158811857; Mon, 11 Sep 2017 12:40:11 -0700 (PDT) MIME-Version: 1.0 Received: by 10.74.57.30 with HTTP; Mon, 11 Sep 2017 12:40:11 -0700 (PDT) In-Reply-To: References: <36a479a8-e22b-f675-7f3d-b7324f872357@netcologne.de> From: "H.J. Lu" Date: Mon, 11 Sep 2017 19:47:00 -0000 Message-ID: Subject: Re: [Patch, fortran] PR34640 - ICE when assigning item of a derived-component to a pointer To: Paul Richard Thomas Cc: Thomas Koenig , "fortran@gcc.gnu.org" , gcc-patches , Damian Rouson , "Bader, Reinhold" Content-Type: text/plain; charset="UTF-8" X-SW-Source: 2017-09/txt/msg00030.txt.bz2 On Sun, Jul 9, 2017 at 11:43 AM, Paul Richard Thomas wrote: > Hi Thomas, Hi All, > > Please find attached what I believe is the final version of the patch. > > The problem concerning temporaries being generated in lieu of the > descriptor being passed directly - see pointer_array_7.f90 and the > change to subref_array_4.f90. This latter necessitated a thread on clf > to get right. Thanks are due to Thomas for initiating it. > > I took the opportunity of the delay, while the bounds issue was being > discussed on clf, to fix class pointer arrays. They now function > correctly, as evidenced by pointer_array_8.f90. > > A possible final tweak - as asked before, should I bump up the module > version number? My inclination is to say that we should. > > Bootstrapped and regtested on FC23/x86_64 - OK for trunk? > > Paul > > 2017-07-09 Paul Thomas > > PR fortran/34640 > PR fortran/40737 > PR fortran/55763 > PR fortran/57019 > PR fortran/57116 > > * expr.c (is_subref_array): Add class pointer array dummies > to the list of expressions that return true. > * trans-array.c: Add SPAN_FIELD and update indices for > subsequent fields. > (gfc_conv_descriptor_span, gfc_conv_descriptor_span_get, > gfc_conv_descriptor_span_set, is_pointer_array, > get_array_span): New functions. > (gfc_get_descriptor_offsets_for_info): New function to preserve > API for access to descriptor fields for trans-types.c. > (gfc_conv_scalarized_array_ref): If the expression is a subref > array, make sure that info->descriptor is a descriptor type. > Otherwise, if info->descriptor is a pointer array, set 'decl' > and fix it if it is a component reference. > (build_array_ref): Simplify handling of class array refs by > passing the vptr to gfc_build_array_ref rather than generating > the pointer arithmetic in this function. > (gfc_conv_array_ref): As in gfc_conv_scalarized_array_ref, set > 'decl'. > (gfc_array_allocate): Set the span field if this is a pointer > array. Use the expr3 element size if it is available, so that > the dynamic type element size is used. > (gfc_conv_expr_descriptor): Set the span field for pointer > assignments. > * trans-array.h: Prototypes for gfc_conv_descriptor_span_get > gfc_conv_descriptor_span_set and > gfc_get_descriptor_offsets_for_info added. > trans-decl.c (gfc_get_symbol_decl): If a non-class pointer > array, mark the declaration as a GFC_DECL_PTR_ARRAY_P. Remove > the setting of GFC_DECL_SPAN. > (gfc_trans_deferred_vars): Set the span field to zero in thge > originating scope. > * trans-expr.c (gfc_conv_procedure_call): Do not use copy-in/ > copy-out to pass subref expressions to a pointer dummy. > (gfc_trans_pointer_assignment): Remove code for setting of > GFC_DECL_SPAN. Set the 'span' field for non-class pointers to > class function results. Likewise for rank remap. > * trans-intrinsic.c (conv_expr_ref_to_caf_ref): Pick up the > 'token' offset from the field decl in the descriptor. > (conv_isocbinding_subroutine): Set the 'span' field. > * trans-io.c (gfc_trans_transfer): Always scalarize pointer > array io. > * trans-stmt.c (trans_associate_var): Set the 'span' field. > * trans-types.c (gfc_get_array_descriptor_base): Add the 'span' > field to the array descriptor. > (gfc_get_derived_type): Pointer array components are marked as > GFC_DECL_PTR_ARRAY_P. > (gfc_get_array_descr_info): Replaced API breaking code for > descriptor offset calling gfc_get_descriptor_offsets_for_info. > * trans.c (get_array_span): New function. > (gfc_build_array_ref): Simplify by calling get_array_span and > obtain 'span' if 'decl' or 'vptr' present. > * trans.h : Rename DECL_LANG_FLAG_6, GFC_DECL_SUBREF_ARRAY_P, > as GFC_DECL_PTR_ARRAY_P. > > > 2017-07-09 Paul Thomas > > PR fortran/34640 > * gfortran.dg/assumed_type_2.f90: Adjust some of the tree dump > checks. > * gfortran.dg/no_arg_check_2.f90: Likewise. > * gfortran.dg/pointer_array_1.f90: New test. > * gfortran.dg/pointer_array_2.f90: New test. > * gfortran.dg/pointer_array_7.f90: New test. > * gfortran.dg/pointer_array_8.f90: New test. > * gfortran.dg/pointer_array_component_1.f90: New test. > * gfortran.dg/pointer_array_component_2.f90: New test. > * gfortran.dg/goacc/kernels-alias-4.f95: Bump up both tree scan > counts by 1. > * gfortran.dg/subref_array_pointer_4.f90: Use the passed lower > bound for 'Q' to provide an offset for array element access. > > PR fortran/40737 > * gfortran.dg/pointer_array_3.f90: New test. > > PR fortran/57116 > * gfortran.dg/pointer_array_4.f90: New test. > > PR fortran/55763 > * gfortran.dg/pointer_array_5.f90: New test. > > PR fortran/57019 > * gfortran.dg/pointer_array_6.f90: New test. > > 2017-07-09 Paul Thomas > > PR fortran/34640 > * libgfortran/libgfortran.h: Add span field to descriptor. > This caused: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82184 -- H.J.