https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80774

--- Comment #13 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Andre Vehreschild <ve...@gcc.gnu.org>:

https://gcc.gnu.org/g:18f3b223b97011c2eab71c8e48c3a38a12ff8f65

commit r15-2137-g18f3b223b97011c2eab71c8e48c3a38a12ff8f65
Author: Andre Vehreschild <ve...@gcc.gnu.org>
Date:   Thu Dec 31 10:40:30 2020 +0100

    Fortran: Fix Explicit cobounds of a procedures parameter not respected
[PR78466]

    Explicit cobounds of class array procedure parameters were not taken
    into account.  Furthermore were different cobounds in distinct
    procedure parameter lists mixed up, i.e. the last definition was taken
    for all.  The bounds are now regenerated when tree's and expr's bounds
    do not match.

            PR fortran/78466
            PR fortran/80774

    gcc/fortran/ChangeLog:

            * array.cc (gfc_compare_array_spec): Take cotype into account.
            * class.cc (gfc_build_class_symbol): Coarrays are also arrays.
            * gfortran.h (IS_CLASS_COARRAY_OR_ARRAY): New macro to detect
            regular and coarray class arrays.
            * interface.cc (compare_components): Take codimension into
            account.
            * resolve.cc (resolve_symbol): Improve error message.
            * simplify.cc (simplify_bound_dim): Remove duplicate.
            * trans-array.cc (gfc_trans_array_cobounds): Coarrays are also
            arrays.
            (gfc_trans_array_bounds): Same.
            (gfc_trans_dummy_array_bias): Same.
            (get_coarray_as): Get the as having a non-zero codim.
            (is_explicit_coarray): Detect explicit coarrays.
            (gfc_conv_expr_descriptor): Create a new descriptor for explicit
            coarrays.
            * trans-decl.cc (gfc_build_qualified_array): Coarrays are also
            arrays.
            (gfc_build_dummy_array_decl): Same.
            (gfc_get_symbol_decl): Same.
            (gfc_trans_deferred_vars): Same.
            * trans-expr.cc (class_scalar_coarray_to_class): Get the
            descriptor from the correct location.
            (gfc_conv_variable): Pick up the descriptor when needed.
            * trans-types.cc (gfc_is_nodesc_array): Coarrays are also
            arrays.
            (gfc_get_nodesc_array_type): Indentation fix only.
            (cobounds_match_decl): Match a tree's bounds to the expr's
            bounds and return true, when they match.
            (gfc_get_derived_type): Create a new type tree/descriptor, when
            the cobounds of the existing declaration and expr to not
            match.  This happends for class arrays in parameter list, when
            there are different cobound declarations.

    gcc/testsuite/ChangeLog:

            * gfortran.dg/coarray/poly_run_1.f90: Activate old test code.
            * gfortran.dg/coarray/poly_run_2.f90: Activate test.  It was
            stopping before and passing without an error.

Reply via email to