diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/actual_array_substr_1.f90 | 8 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/actual_array_substr_2.f90 | 11 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/array_substring.f90 | 17 |
6 files changed, 30 insertions, 35 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0a7e5f5..ac2bf3a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2018-10-11 Tobias Burnus <burnus@net-b.de> + + Revert: + 2018-10-09 Tobias Burnus <burnus@net-b.de> + + PR fortran/83522 + * resolve.c (resolve_ref): Reject nonscalar + substring references. + 2018-10-09 David Malcolm <dmalcolm@redhat.com> * cpp.c (gfc_cpp_init_0): Update for renamings. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 4ec881e..87e65df 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 f026cb2..3ee2817 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2018-10-11 Tobias Burnus <burnus@net-b.de> + + Revert: + 2018-10-09 Tobias Burnus <burnus@net-b.de> + + 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 <wdijkstr@arm.com> 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 d992f45..7c10c70 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 <pault@gcc.gnu.org> ! 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 958ab41..fed5134 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 <anlauf@gmx.de> ! 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 ea80556..0000000 --- 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 |