From: Tobias Burnus Date: Thu, 11 Oct 2018 19:37:28 +0000 (+0200) Subject: revert: re PR fortran/83522 (ICE on allocatable string reference, string(:)(:)) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2c4f9ec16214b53c53c46dd3a0a22f18a268bc28;p=gcc.git revert: re PR fortran/83522 (ICE on allocatable string reference, string(:)(:)) 2018-10-11 Tobias Burnus Revert: 2018-10-09 Tobias Burnus PR fortran/83522 * resolve.c (resolve_ref): Reject nonscalar substring references. 2018-10-11 Tobias Burnus Revert: 2018-10-09 Tobias Burnus PR fortran/83522 * gfortran.dg/actual_array_substr_1.f90: Add dg-error, change to dg-do compile. * gfortran.dg/actual_array_substr_2.f90: Ditto. * gfortran.dg/array_initializer_1.f90: Use array element not size-one section. * gfortran.dg/array_substring.f90: New. From-SVN: r265059 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0a7e5f5b761..ac2bf3a49ef 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2018-10-11 Tobias Burnus + + Revert: + 2018-10-09 Tobias Burnus + + PR fortran/83522 + * resolve.c (resolve_ref): Reject nonscalar + substring references. + 2018-10-09 David Malcolm * cpp.c (gfc_cpp_init_0): Update for renamings. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 4ec881e5d78..87e65df5f4e 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5129,13 +5129,6 @@ resolve_ref (gfc_expr *expr) break; case REF_SUBSTRING: - /* F2008, R610 alias F2018, R908. */ - if (current_part_dimension || seen_part_dimension) - { - gfc_error ("Substring reference of nonscalar not permitted at %L", - &expr->where); - return false; - } break; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f026cb26064..3ee2817de00 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2018-10-11 Tobias Burnus + + Revert: + 2018-10-09 Tobias Burnus + + PR fortran/83522 + * gfortran.dg/actual_array_substr_1.f90: Add dg-error, + change to dg-do compile. + * gfortran.dg/actual_array_substr_2.f90: Ditto. + * gfortran.dg/array_initializer_1.f90: Use array + element not size-one section. + * gfortran.dg/array_substring.f90: New. + 2018-10-11 Wilco Dijkstra PR target/87511 diff --git a/gcc/testsuite/gfortran.dg/actual_array_substr_1.f90 b/gcc/testsuite/gfortran.dg/actual_array_substr_1.f90 index d992f45f465..7c10c7020eb 100644 --- a/gcc/testsuite/gfortran.dg/actual_array_substr_1.f90 +++ b/gcc/testsuite/gfortran.dg/actual_array_substr_1.f90 @@ -1,17 +1,15 @@ -! { dg-do compile } +! { dg-do run } ! Test fix of PR28118, in which a substring reference to an ! actual argument with an array reference would cause a segfault. ! -! Revised for PR fortran/83522 -! ! Contributed by Paul Thomas ! program gfcbug33 character(12) :: a(2) a(1) = "abcdefghijkl" a(2) = "mnopqrstuvwx" - call foo ((a(2:1:-1)(6:))) ! { dg-error "Substring reference of nonscalar not permitted" } - call bar ((a(:)(7:11))) ! { dg-error "Substring reference of nonscalar not permitted" } + call foo ((a(2:1:-1)(6:))) + call bar ((a(:)(7:11))) contains subroutine foo (chr) character(7) :: chr(:) diff --git a/gcc/testsuite/gfortran.dg/actual_array_substr_2.f90 b/gcc/testsuite/gfortran.dg/actual_array_substr_2.f90 index 958ab418a43..fed51342ee0 100644 --- a/gcc/testsuite/gfortran.dg/actual_array_substr_2.f90 +++ b/gcc/testsuite/gfortran.dg/actual_array_substr_2.f90 @@ -1,12 +1,10 @@ -! { dg-do compile } +! { dg-do run } ! Tests the fix for pr28174, in which the fix for pr28118 was ! corrupting the character lengths of arrays that shared a ! character length structure. In addition, in developing the ! fix, it was noted that intent(out/inout) arguments were not ! getting written back to the calling scope. ! -! Revised for PR fortran/83522 -! ! Based on the testscase by Harald Anlauf ! program pr28174 @@ -22,7 +20,7 @@ program pr28174 n = m - 4 ! Make sure that variable substring references work. - call foo (a(:)(m:m+5), c(:)(n:m+2), d(:)(5:9)) ! { dg-error "Substring reference of nonscalar not permitted" } + call foo (a(:)(m:m+5), c(:)(n:m+2), d(:)(5:9)) if (any (a .ne. teststring)) STOP 1 if (any (b .ne. teststring)) STOP 2 if (any (c .ne. (/"ab456789#hij", & @@ -39,7 +37,8 @@ contains ! This next is not required by the standard but tests the ! functioning of the gfortran implementation. ! if (all (x(:)(3:7) .eq. y)) STOP 5 - x = foostring (:)(5 : 4 + len (x)) ! { dg-error "Substring reference of nonscalar not permitted" } - y = foostring (:)(3 : 2 + len (y)) ! { dg-error "Substring reference of nonscalar not permitted" } + x = foostring (:)(5 : 4 + len (x)) + y = foostring (:)(3 : 2 + len (y)) end subroutine foo end program pr28174 + diff --git a/gcc/testsuite/gfortran.dg/array_substring.f90 b/gcc/testsuite/gfortran.dg/array_substring.f90 deleted file mode 100644 index ea80556cfc1..00000000000 --- a/gcc/testsuite/gfortran.dg/array_substring.f90 +++ /dev/null @@ -1,17 +0,0 @@ -! { dg-do compile } -! -! PR fortran/83522 -! -! Contributed by urbanjost and Jerry DeLisle -! -program testit - character(len=:),allocatable :: strings(:) - integer :: i - strings=[character(len=2) :: 'AA','BB'] - write(*,*)strings(:)(:) ! { dg-error "Substring reference of nonscalar not permitted" } - !strings(:)(:) ! Parse error: "Invalid character in name" - strings(:)(:) = 'x' ! { dg-error "Substring reference of nonscalar not permitted" } - do i=1, size(strings) - write(*,*)strings(i)(:) ! This is valid and works - end do -end program testit