Commit 48e76d2f by Tobias Burnus Committed by Tobias Burnus

Fortran] PR68020 – Fix implied-shape handling for rank > 2

        PR fortran/68020
        * array.c (gfc_match_array_spec): Fix implied-type matching
        for rank > 2.

        PR fortran/68020
        * gfortran.dg/implied_shape_4.f90: New.
        * gfortran.dg/implied_shape_5.f90: New.

From-SVN: r279835
parent 4ea5d54b
2020-01-02 Tobias Burnus <tobias@codesourcery.com>
PR fortran/68020
* array.c (gfc_match_array_spec): Fix implied-type matching
for rank > 2.
2020-01-01 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/93113
......
......@@ -599,7 +599,7 @@ gfc_match_array_spec (gfc_array_spec **asp, bool match_dim, bool match_codim)
goto cleanup;
case AS_IMPLIED_SHAPE:
if (current_type != AS_ASSUMED_SHAPE)
if (current_type != AS_ASSUMED_SIZE)
{
gfc_error ("Bad array specification for implied-shape"
" array at %C");
......
2020-01-02 Tobias Burnus <tobias@codesourcery.com>
PR fortran/68020
* gfortran.dg/implied_shape_4.f90: New.
* gfortran.dg/implied_shape_5.f90: New.
2020-01-02 Jakub Jelinek <jakub@redhat.com>
PR ipa/93087
......
! { dg-do run }
! { dg-additional-options "-std=f2008" }
!
! PR fortran/68020
!
! Contributed by Gerhard Steinmetz
!
subroutine rank_1_2
integer, parameter :: a(1, 2) = 0
integer, parameter :: x(*, *) = a
integer, parameter :: y(11:*, 12:*) = a
integer :: k
if (any (lbound(x) /= [1,1])) stop 1
if (any (ubound(x) /= [1,2])) stop 2
if (any (lbound(y) /= [11,12])) stop 3
if (any (ubound(y) /= [11,13])) stop 4
end
subroutine rank_3
integer, parameter :: a(1, 2, 3) = 0
integer, parameter :: x(*, *, *) = a
integer, parameter :: y(11:*, 12:*, 13:*) = a
integer :: k
if (any (lbound(x) /= [1,1,1])) stop 5
if (any (ubound(x) /= [1,2,3])) stop 6
if (any (lbound(y) /= [11,12,13])) stop 7
if (any (ubound(y) /= [11,13,15])) stop 8
end
subroutine rank_4
integer, parameter :: a(1, 2, 3, 4) = 0
integer, parameter :: x(*, *, *, *) = a
integer, parameter :: y(11:*, 12:*, 13:*, 14:*) = a
integer :: k
if (any (lbound(x) /= [1,1,1,1])) stop 9
if (any (ubound(x) /= [1,2,3,4])) stop 10
if (any (lbound(y) /= [11,12,13,14])) stop 11
if (any (ubound(y) /= [11,13,15,17])) stop 12
end
program p
call rank_1_2
call rank_3
call rank_4
end program p
! { dg-do run }
!
! PR fortran/68020
!
! Reject mixing explicit-shape and implied-shape arrays
!
subroutine rank_1_2
integer, parameter :: a(1, 2) = 0
integer, parameter :: y(11:11, 12:*) = a ! { dg-error "Assumed size array at .1. must be a dummy argument" }
integer, parameter :: x(:, *) = a ! { dg-error "Bad specification for deferred shape array" }
end
subroutine rank_3
integer, parameter :: a(1, 2, 3) = 0
integer, parameter :: y(11:*, 12:14, 13:*) = a ! { dg-error "Bad specification for assumed size array" }
integer, parameter :: x(11:*, :, 13:*) = a ! { dg-error "Bad specification for assumed size array" }
end
subroutine rank_4
integer, parameter :: a(1, 2, 3, 4) = 0
integer, parameter :: y(11:*, 12:*, 13:*, 14:17) = a ! { dg-error "Bad array specification for implied-shape array" }
integer, parameter :: y(11:*, 12:*, 13:*, 14:) = a ! { dg-error "Bad array specification for implied-shape array" }
end
program p
call rank_1_2
call rank_3
call rank_4
end program p
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment