On Sun, Jul 9, 2017 at 11:43 AM, Paul Richard Thomas
<paul.richard.tho...@gmail.com> 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  <pa...@gcc.gnu.org>
>
>     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  <pa...@gcc.gnu.org>
>
>     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  <pa...@gcc.gnu.org>
>
>     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.

Reply via email to